this repo has no description
at main 3.3 kB view raw
1<?php 2 3namespace App\Http\Controllers; 4 5use Illuminate\Http\Request; 6use Illuminate\Routing\Controller; 7use Illuminate\Support\Facades\DB; 8 9class AuthController extends Controller 10{ 11 function login(Request $request) 12 { 13 session_start(); 14 15 // Skickar användaren till redan inloggad sidan om personen redan är inloggad 16 if(isset($_SESSION['qrtag']['id'])) 17 { 18 return view('pages.auth.already_logged_in'); 19 } 20 21 // Logga in eleven med skolans ldap server 22 $username = explode('@', $request->post('username'))[0]; 23 $ldap = ldap_connect('ldaps://ad.ssis.nu'); 24 if($ldap === false) // Skicka personen till hem sidan om ldapen är nere 25 { 26 return view('pages.login', ['error' => 'Elev servern verkar vara nere. Kontakta ' . $_ENV['MAINTAINER_NAME'] . '!']); 27 } 28 $bind = @ldap_bind($ldap, $username . "@ad.ssis.nu", $request->post('password')); 29 30 if(!$bind) 31 { 32 return view('pages.login', ['error' => 'Ditt användarnamn eller lösenord var fel.']); 33 } 34 35 // Kolla om användaren redan finns i databasen och om den finns sätt sessionen till databas raden och återgå till hem 36 $user = DB::table('users')->where('username', $username)->first(['id', 'display_name', 'is_admin', 'class']); 37 38 if($user) 39 { 40 $_SESSION['qrtag']['username'] = $username; 41 $_SESSION['qrtag']['id'] = $user->id; 42 $_SESSION['qrtag']['is_admin'] = $user->is_admin; 43 $_SESSION['qrtag']['name'] = $user->display_name; 44 $_SESSION['qrtag']['class'] = $user->class; 45 46 return redirect('/'); 47 } 48 49 // Om användaren inte finns i databasen sök efter elev's elev information i ldapen 50 $search = ldap_search($ldap, "DC=ad,DC=ssis,DC=nu", "(sAMAccountName=" . $username . ")", array("cn", "givenName", "sn", "memberOf")) or die('ldap_search failed'); 51 $userInfo = ldap_get_entries($ldap, $search); 52 53 if($userInfo['count'] == 0) 54 { 55 return view('pages.login', ['error' => 'Kunde inte hitta dig i elev servern. Är du inte en elev? Kontakta ' . $_ENV['MAINTAINER_NAME'] . ' om du vill ha tillgång.']); 56 } 57 $userInfo = $userInfo[0]; 58 59 // Skaffa elevens fulla namn och få elvens klass 60 $name = $userInfo['givenname'][0] . ' ' . $userInfo['sn'][0]; 61 $class = 'Lärare'; 62 63 foreach($userInfo['memberof'] as $sg) 64 { 65 if(strpos($sg, 'OU=Klass') !== false) 66 { 67 $class = substr($sg, 3, 5); 68 break; 69 } 70 } 71 72 // Skapa eleven i databasen 73 $userId = DB::table('users')->insertGetId([ 74 'username' => $username, 75 'display_name' => $name, 76 'class' => $class, 77 'is_admin' => 0 78 ]); 79 80 // Skapa sessionen 81 $_SESSION['qrtag']['id'] = $userId; 82 $_SESSION['qrtag']['username'] = $username; 83 $_SESSION['qrtag']['is_admin'] = 0; 84 $_SESSION['qrtag']['name'] = $name; 85 $_SESSION['qrtag']['class'] = $class; 86 87 return redirect('/'); 88 } 89 90 function logout(Request $request) 91 { 92 session_start(); 93 $_SESSION = []; 94 return redirect('/'); 95 } 96}