school.home.ts 7.15 KB
Newer Older
1 2 3 4 5 6 7
import { NgRedux } from "@angular-redux/store";
import { Component, OnDestroy, OnInit } from "@angular/core";
import { FormBuilder, FormGroup } from "@angular/forms";
import { ActivatedRoute, Params, Router } from "@angular/router";
import { CookieService } from "ngx-cookie";
import { BehaviorSubject, Subscription } from "rxjs/Rx";

8
import { LoginInfoActions } from "../actions/logininfo.actions";
9 10
import { API_ENDPOINT, API_ENDPOINT_PARAMS } from "../app.settings";
import { HelperDataService } from "../services/helper-data-service";
11
import { LOGININFO_INITIAL_STATE } from "../store/logininfo/logininfo.initial-state";
12
import { ILoginInfoRecords } from "../store/logininfo/logininfo.types";
13
import { IAppState } from "../store/store";
14 15

@Component({
16
    selector: "school-home",
17
    template: `
18 19 20
<div style="min-height: 300px; margin-top: 100px;">
    <div *ngIf="(errorCode$ | async) != ''">
        <div [ngSwitch]="errorCode$ | async">
21 22
            <p class="text-danger" *ngSwitchCase="5001">Προέκυψε σφάλμα κατά την διαδικασία αυθεντικοποίησης σας.</p>
            <p class="text-danger" *ngSwitchCase="5002">Πρέπει να συνδεθείτε με λογαριασμό του Πανελλήνιου Σχολικού Δικτύου, για να χρησιμοποιήσετε την εφαρμογή.</p>
23
            <p class="text-danger" *ngSwitchCase="5003">Πρέπει να συνδεθείτε με τον λογαριασμό που χρησιμοποιείτε για να συνδεθείτε στο Myschool, για να χρησιμοποιήσετε την εφαρμογή.</p>
24 25
            <p class="text-danger" *ngSwitchCase="5004">Ο ρόλος που αντιστοιχεί στον λογαριασμό σας στο Πανελλήνιο Σχολικό Δίκτυο δεν επιτρέπεται να χρησιμοποιήσετε την εφαρμογή.</p>
            <p class="text-danger" *ngSwitchCase="5005">Προέκυψε σφάλμα κατά την διαδικασία αυθεντικοποίησης σας.</p>
26
            <p class="text-danger" *ngSwitchCase="6000">Προέκυψε σφάλμα κατά την διαδικασία αυθεντικοποίησης σας. <br/>Παρακαλώ συνδεθείτε χρησιμοποιώντας τα στοιχεία του λογαριασμού με τον οποίο συνδέεστε στο Myschool.</p>
27
            <p class="text-danger" *ngSwitchDefault>Προέκυψε σφάλμα {{ errorCode$ | async }}</p>
28 29 30 31 32 33 34 35 36
        </div>
        <div class="alert alert-danger" role="alert">Για να επαναλάβετε τη διαδικασία σύνδεσης πρέπει πρώτα να αποσυνδεθείτε.</div>
        <div class="row">
            <div class="col-sm-4">&nbsp;</div>
            <div class="col-sm-4">
                <button type="submit" class="btn btn-lg btn-block isclickable" (click)="casSignOut()">Αποσύνδεση</button>
            </div>
        </div>
    </div>
37
    <div *ngIf="(errorCode$ | async) == ''">
38 39
        <form [formGroup]="formGroup" method = "POST" action="{{apiEndPoint}}/cas/login{{apiEndPointParams}}" #form>
            <!-- <input type="hidden" name="X-oauth-enabled" value="true"> -->
40
            <div *ngFor="let loginInfoToken$ of loginInfo$ | async; let i=index"></div>
41
            <div class="row">
42 43 44 45 46
                <div *ngIf="!authToken" class="col-md-8 offset-md-4">
                    <button type="submit" class="btn-primary btn-lg" (click)="form.submit()">
                    Είσοδος μέσω Π.Σ.Δ<span class="glyphicon glyphicon-menu-right"></span>
                    </button>
                </div>
47
            </div>
48 49 50 51
        </form>
    </div>
</div>
`
52 53
})

54
export default class SchoolHome implements OnInit, OnDestroy {
55
    private formGroup: FormGroup;
56
    private authToken: string;
57
    private errorCode$: BehaviorSubject<string>;
58 59 60
    private authRole: string;
    private name: any;
    private xcsrftoken: any;
61
    private loginInfo$: BehaviorSubject<ILoginInfoRecords>;
62
    private loginInfoSub: Subscription;
63
    private queryParamSub: Subscription;
64
    private apiEndPoint = API_ENDPOINT;
65
    private apiEndPointParams = API_ENDPOINT_PARAMS;
66 67 68 69 70 71

    constructor(private fb: FormBuilder,
        private _ata: LoginInfoActions,
        private _ngRedux: NgRedux<IAppState>,
        private activatedRoute: ActivatedRoute,
        private _hds: HelperDataService,
72
        private router: Router,
73
        private _cookieService: CookieService
74
    ) {
75 76 77
        this.authToken = "";
        this.authRole = "";
        this.name = "";
78
        this.loginInfo$ = new BehaviorSubject(LOGININFO_INITIAL_STATE);
79
        this.errorCode$ = new BehaviorSubject("");
80 81 82 83
        this.formGroup = this.fb.group({
        });
    };

84 85 86
    ngOnDestroy() {
        if (this.loginInfoSub)
            this.loginInfoSub.unsubscribe();
87 88
        if (this.queryParamSub)
            this.queryParamSub.unsubscribe();
89 90
    };

91
    ngOnInit() {
92
        this.loginInfoSub = this._ngRedux.select("loginInfo")
93 94
            .map(loginInfo => <ILoginInfoRecords>loginInfo)
            .subscribe(linfo => {
95
                if (linfo.size > 0) {
96 97 98
                    linfo.reduce(({ }, loginInfoObj) => {
                        this.authToken = loginInfoObj.auth_token;
                        this.authRole = loginInfoObj.auth_role;
99 100 101 102 103 104 105 106
                        if (this.authToken && this.authToken.length > 0) {
                            if (this.authRole === "director") {
                                this.router.navigate(["/school/director-buttons"]);
                            }
                            else if (this.authRole === "pde")
                                this.router.navigate(["/school/perfecture-view"]);
                            else if (this.authRole === "dide")
                                this.router.navigate(["/school/eduadmin-view"]);
107
                        }
108
                        return loginInfoObj;
109 110
                    }, {});
                }
111

112 113
                this.loginInfo$.next(linfo);
            });
114 115

        // subscribe to router event
116
        this.queryParamSub = this.activatedRoute.queryParams.subscribe((params: Params) => {
117
            if (params) {
118 119
                this.authToken = params["auth_token"];
                this.authRole = params["auth_role"];
120
                this.errorCode$.next((params["error_code"] === undefined) ? "" : params["error_code"]);
121
            }
122
            if (this.authToken && this.authRole && this.errorCode$.getValue() === "") {
123
                this._ata.getloginInfo({ auth_token: this.authToken, auth_role: this.authRole });
124
            }
125
        });
126
    }
127

128
    getCookie(key: string) {
129 130
        return this._cookieService.get(key);
    }
131

132
    removeCookie(key: string) {
133
        return this._cookieService.remove(key);
134
    }
135

136 137 138
    checkvalidation() {

    }
139 140 141 142 143 144 145

    /**
     * Logout from CAS only helper
     */
    casSignOut() {
        this._hds.casSignOut().then(data => {
            this._ata.initLoginInfo();
146 147
            this.authToken = "";
            this.authRole = "";
148 149
            window.location.assign((<any>data).next);
        }).catch(err => {
150
            console.log(err);
151 152
        });
    }
153
}