From 734ac61ed4298a602c10fd8add9faf11dc1cfd5f Mon Sep 17 00:00:00 2001 From: amanecer Date: Sun, 18 Feb 2018 11:14:11 +0200 Subject: [PATCH 1/2] init add storage util to support cookies --- src/auth.service.ts | 19 ++++++------- src/storage.utils.ts | 64 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 9 deletions(-) create mode 100644 src/storage.utils.ts diff --git a/src/auth.service.ts b/src/auth.service.ts index d8db624..91100fd 100644 --- a/src/auth.service.ts +++ b/src/auth.service.ts @@ -1,6 +1,7 @@ import { Injectable } from "@angular/core"; import { Observable } from "rxjs/Observable"; import { Observer } from "rxjs/Observer"; +import { saveToStorage, loadFromStorage, DeleteFromStorage} from "storage.utils"; declare let gapi: any; declare let IN: any; @@ -29,12 +30,12 @@ export class AuthService { } if(!this.gauth.isSignedIn.get()){ this.gauth.signIn().then(() => { - localStorage.setItem('_login_provider', 'google'); + saveToStorage('_login_provider', 'google'); observer.next(this._fetchGoogleUserDetails()); observer.complete(); }); }else{ - localStorage.setItem('_login_provider', 'google'); + saveToStorage('_login_provider', 'google'); observer.next(this._fetchGoogleUserDetails()); observer.complete(); } @@ -55,7 +56,7 @@ export class AuthService { image: res.picture.data.url, token: response.authResponse.accessToken } - localStorage.setItem('_login_provider', 'facebook'); + saveToStorage('_login_provider', 'facebook'); observer.next(userDetails); observer.complete(); } @@ -76,7 +77,7 @@ export class AuthService { image: res.picture.data.url, token: response.authResponse.accessToken } - localStorage.setItem('_login_provider', 'facebook'); + saveToStorage('_login_provider', 'facebook'); observer.next(userDetails); observer.complete(); } @@ -90,7 +91,7 @@ export class AuthService { IN.User.authorize(function(){ IN.API.Raw("/people/~:(id,first-name,last-name,email-address,picture-url)").result(function(res: any){ let userDetails = {name: res.firstName + " " + res.lastName, email: res.emailAddress, uid: res.id, provider: "linkedIN", image: res.pictureUrl}; - localStorage.setItem('_login_provider', 'linkedin'); + saveToStorage('_login_provider', 'linkedin'); observer.next(userDetails); observer.complete(); }); @@ -102,7 +103,7 @@ export class AuthService { } logout(): Observable{ - let provider = localStorage.getItem("_login_provider"); + let provider = loadFromStorage("_login_provider"); return Observable.create((observer: any) => { switch(provider){ case "google": @@ -117,21 +118,21 @@ export class AuthService { gSignout.src = "https://accounts.google.com/Logout"; gSignout.type = "text/html"; gSignout.id = "gSignout"; - localStorage.removeItem('_login_provider'); + DeleteFromStorage('_login_provider'); observer.next(true); observer.complete(); ref.parentNode.insertBefore(gSignout, ref); break; case "facebook": FB.logout(function(res: any){ - localStorage.removeItem('_login_provider'); + DeleteFromStorage('_login_provider'); observer.next(true); observer.complete(); }); break; case "linkedin": IN.User.logout(function(){ - localStorage.removeItem('_login_provider'); + DeleteFromStorage('_login_provider'); observer.next(true); observer.complete(); }, {}); diff --git a/src/storage.utils.ts b/src/storage.utils.ts new file mode 100644 index 0000000..b3252fc --- /dev/null +++ b/src/storage.utils.ts @@ -0,0 +1,64 @@ +export function setCookie(cname: string, cvalue: any, exdays = 1): void { + const d = new Date(); + d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000)); + const expires = 'expires=' + d.toUTCString(); + document.cookie = `${cname}=${cvalue};${expires};path=/`; +} + +export function getCookie(cname: string): any { + const name = `${cname}=`; + const decodedCookie = decodeURIComponent(document.cookie); + const ca = decodedCookie.split(';'); + for (let i = 0; i < ca.length; i++) { + let c = ca[i]; + while (c.charAt(0) === ' ') { + c = c.substring(1); + } + if (c.indexOf(name) === 0) { + return c.substring(name.length, c.length); + } + } + return ''; +} + +export function setLocalStorage(cname: string, cvalue: any): void { + localStorage.setItem(cname, cvalue); +} + +export function getLocalStorage(cname: string): any { + return localStorage.getItem(cname); +} + +export function deleteLocalStorage(cname: string): void { + localStorage.removeItem(cname); +} + +export function deleteCookie(cname: string): void { + setCookie(cname, '', 0); +} + + +export function isLocalStorageAvailable(): boolean { + const test = 'test'; + try { + localStorage.setItem(test, test); + localStorage.removeItem(test); + return true; + } catch (e) { + return false; + } +} + +export const getSavingMethod = () => { + return isLocalStorageAvailable() ? setLocalStorage : setCookie; +}; +export const getRetrieveMethod = () => { + return isLocalStorageAvailable() ? getLocalStorage : getCookie; +} +;export const getDeleteMethod = () => { + return isLocalStorageAvailable() ? deleteLocalStorage : deleteCookie; +}; + +export const saveToStorage = getSavingMethod(); +export const loadFromStorage = getRetrieveMethod(); +export const DeleteFromStorage = getDeleteMethod(); \ No newline at end of file From 847f73643460bf03528624496bc76e55089d286f Mon Sep 17 00:00:00 2001 From: amanecer Date: Sun, 18 Feb 2018 11:21:05 +0200 Subject: [PATCH 2/2] typo fix --- src/auth.service.ts | 8 ++++---- src/storage.utils.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/auth.service.ts b/src/auth.service.ts index 91100fd..3975406 100644 --- a/src/auth.service.ts +++ b/src/auth.service.ts @@ -1,7 +1,7 @@ import { Injectable } from "@angular/core"; import { Observable } from "rxjs/Observable"; import { Observer } from "rxjs/Observer"; -import { saveToStorage, loadFromStorage, DeleteFromStorage} from "storage.utils"; +import { saveToStorage, loadFromStorage, deleteFromStorage} from "storage.utils"; declare let gapi: any; declare let IN: any; @@ -118,21 +118,21 @@ export class AuthService { gSignout.src = "https://accounts.google.com/Logout"; gSignout.type = "text/html"; gSignout.id = "gSignout"; - DeleteFromStorage('_login_provider'); + deleteFromStorage('_login_provider'); observer.next(true); observer.complete(); ref.parentNode.insertBefore(gSignout, ref); break; case "facebook": FB.logout(function(res: any){ - DeleteFromStorage('_login_provider'); + deleteFromStorage('_login_provider'); observer.next(true); observer.complete(); }); break; case "linkedin": IN.User.logout(function(){ - DeleteFromStorage('_login_provider'); + deleteFromStorage('_login_provider'); observer.next(true); observer.complete(); }, {}); diff --git a/src/storage.utils.ts b/src/storage.utils.ts index b3252fc..44ccecb 100644 --- a/src/storage.utils.ts +++ b/src/storage.utils.ts @@ -61,4 +61,4 @@ export const getRetrieveMethod = () => { export const saveToStorage = getSavingMethod(); export const loadFromStorage = getRetrieveMethod(); -export const DeleteFromStorage = getDeleteMethod(); \ No newline at end of file +export const deleteFromStorage = getDeleteMethod(); \ No newline at end of file