this repo has no description
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}