Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import {Injectable} from '@angular/core';
- import {JwtHelper} from 'angular2-jwt';
- import { User } from '../shared/models/user';
- import {ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot} from '@angular/router';
- import {Observable} from 'rxjs/Observable';
- @Injectable()
- export class SessionService implements CanActivate {
- session;
- isAuthenticated: boolean;
- jwtHelper: JwtHelper = new JwtHelper();
- user: User;
- constructor() {
- // TODO: Verify session valid
- this.exists();
- }
- /**
- * @param accessToken
- * @returns {{accessToken: *}|*|null}
- */
- create(accessToken) {
- this.session = {
- accessToken: accessToken
- };
- this.isAuthenticated = true;
- this.user = new User();
- this.decodeUserFromToken(accessToken);
- localStorage.session = this.session;
- return this.session;
- }
- destroy() {
- this.session = null;
- const subdomain = localStorage.subdomain;
- this.isAuthenticated = false;
- this.user = null;
- localStorage.clear();
- if (subdomain) {
- localStorage.subdomain = subdomain;
- }
- }
- exists() {
- const exists = typeof localStorage.session !== 'undefined' && localStorage.session !== null;
- if (exists) {
- this.isAuthenticated = true;
- console.log('User exists');
- }
- return exists;
- }
- decodeUserFromToken(token) {
- const decodedToken = this.jwtHelper.decodeToken(token);
- if (decodedToken) {
- this.setUser(decodedToken);
- }
- }
- setUser(decodedUser) {
- this.user.id = decodedUser._id;
- this.user.email = decodedUser.email;
- }
- addAuthHeaders(headers) {
- if (this.exists()) {
- headers.append('Authorization', this.session.accessToken);
- }
- }
- getUser() {
- return this.user;
- }
- getSession() {
- return localStorage.session;
- }
- getParameterByName(name) {
- name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
- const regex = new RegExp('[\\?&]' + name + '=([^&#]*)'),
- results = regex.exec(location.href);
- return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
- }
- canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
- return this.isAuthenticated;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement