diff --git a/dmp-admin/src/app/app.module.ts b/dmp-admin/src/app/app.module.ts index c05b1c55e..2dc57045a 100644 --- a/dmp-admin/src/app/app.module.ts +++ b/dmp-admin/src/app/app.module.ts @@ -11,7 +11,6 @@ import { ReactiveFormsModule } from '@angular/forms'; import { ContextMenuModule } from 'ngx-contextmenu'; import { Ng2Webstorage } from 'ngx-webstorage'; -import { AuthInterceptor } from './services/interceptors/auth-interceptor'; import { RestBase } from './services/rest-base'; import { TokenService } from './services/login/token.service'; import { NativeLoginService } from './services/login/native-login.service'; diff --git a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html b/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html index 6f8b452e9..4859817e1 100644 --- a/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html +++ b/dmp-admin/src/app/datasets-viewer/datasets-viewer.component.html @@ -41,15 +41,15 @@ - {{dataset.id}} + {{dataset?.id}} diff --git a/dmp-admin/src/app/services/login/native-login.service.ts b/dmp-admin/src/app/services/login/native-login.service.ts index ca5fb25d5..34f7cf6a3 100644 --- a/dmp-admin/src/app/services/login/native-login.service.ts +++ b/dmp-admin/src/app/services/login/native-login.service.ts @@ -18,7 +18,7 @@ export class NativeLoginService implements OnInit { login(username, password){ var credentials = {"username": username, "password":password}; - return this.restBase.post("project/create", credentials); + return this.restBase.post("nativeLogin", credentials); } diff --git a/dmp-admin/src/app/services/login/token.service.ts b/dmp-admin/src/app/services/login/token.service.ts index 8259095b5..5b2bd7897 100644 --- a/dmp-admin/src/app/services/login/token.service.ts +++ b/dmp-admin/src/app/services/login/token.service.ts @@ -1,16 +1,29 @@ -import { Injectable, } from '@angular/core'; +import { Injectable, Inject} from '@angular/core'; import { Observable } from 'rxjs'; import {LocalStorageService} from 'ngx-webstorage'; import 'rxjs/add/operator/map'; +import { DOCUMENT } from '@angular/platform-browser'; +declare var jQuery : any; @Injectable() export class TokenService { - constructor (private storage : LocalStorageService) { - + constructor (private storage : LocalStorageService, @Inject(DOCUMENT) private document) { + var csrfToken : string = jQuery(document).find('meta[name="csrf-token"]').attr('content'); + this.setCSRFToken(csrfToken); } + + + getCSRFToken() : string{ + return this.storage.retrieve('csrf-token'); + } + + setCSRFToken(csrfToken : string){ + this.storage.store('csrf-token',csrfToken); + } + getProvider() : TokenProvider { return this.storage.retrieve('provider'); diff --git a/dmp-admin/src/app/services/rest-base.ts b/dmp-admin/src/app/services/rest-base.ts index 28ba71483..3d24a03ec 100644 --- a/dmp-admin/src/app/services/rest-base.ts +++ b/dmp-admin/src/app/services/rest-base.ts @@ -41,12 +41,14 @@ export class RestBase { private createOptions(){ var token = this.tokenService.getToken(); var provider: TokenProvider = this.tokenService.getProvider(); + var csrfToken : string = this.tokenService.getCSRFToken(); + const params = new HttpParams(); - var headers; + var headers; if(provider == TokenProvider.google) - headers = new HttpHeaders().set('Content-Type', 'application/json').set("google-token", token); - if(provider == TokenProvider.google) - headers = new HttpHeaders().set('Content-Type', 'application/json').set("google-token", token); + headers = new HttpHeaders().set('Content-Type', 'application/json').set('X-CSRF-Token', csrfToken).set("google-token", token); + if(provider == TokenProvider.native) + headers = new HttpHeaders().set('Content-Type', 'application/json').set('X-CSRF-Token', csrfToken).set("native-token", token); let options = { params: params, headers: headers }; return options; } diff --git a/dmp-admin/src/index.html b/dmp-admin/src/index.html index 791666a35..7f54dfa42 100644 --- a/dmp-admin/src/index.html +++ b/dmp-admin/src/index.html @@ -4,6 +4,7 @@ DmpAdmin + diff --git a/dmp-frontend/package-lock.json b/dmp-frontend/package-lock.json index c050a5ace..69989fb2b 100644 --- a/dmp-frontend/package-lock.json +++ b/dmp-frontend/package-lock.json @@ -5366,6 +5366,11 @@ "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", "dev": true }, + "ngx-webstorage": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ngx-webstorage/-/ngx-webstorage-1.8.0.tgz", + "integrity": "sha1-zQhbmPvHpyzI8qqkDGyASzjUVt4=" + }, "no-case": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.1.tgz", diff --git a/dmp-frontend/package.json b/dmp-frontend/package.json index a2eb501cf..68d9e8075 100644 --- a/dmp-frontend/package.json +++ b/dmp-frontend/package.json @@ -25,6 +25,7 @@ "bootstrap": "^3.3.7", "core-js": "^2.4.1", "jquery": "^3.2.1", + "ngx-webstorage": "^1.8.0", "rxjs": "^5.4.2", "zone.js": "^0.8.17" }, diff --git a/dmp-frontend/src/app/app.module.ts b/dmp-frontend/src/app/app.module.ts index 1c0deaccf..d8db18a98 100644 --- a/dmp-frontend/src/app/app.module.ts +++ b/dmp-frontend/src/app/app.module.ts @@ -9,6 +9,7 @@ import { AppComponent } from './app.component'; import { DynamicFormComponent } from './form/dynamic-form.component'; import { DynamicFormFieldComponent } from './form/fields/dynamic-form-field.component'; import { ServerService } from './services/server.service'; +import { TokenService, TokenProvider } from './services/token.service'; import { dataModelBuilder } from './services/dataModelBuilder.service'; import { DynamicFormGroupComponent } from './form/dynamic-form-group/dynamic-form-group.component'; import { LoginComponent } from './login/login-page'; @@ -41,7 +42,7 @@ import { PaginationService } from './services/pagination.service'; AppRoutingModule ], - providers: [ServerService, dataModelBuilder, AuthGuard, PaginationService], + providers: [ServerService, dataModelBuilder, AuthGuard, PaginationService, TokenService], bootstrap: [AppComponent] }) export class AppModule { diff --git a/dmp-frontend/src/app/login/login-page.ts b/dmp-frontend/src/app/login/login-page.ts index a72782b5e..5b65ae980 100644 --- a/dmp-frontend/src/app/login/login-page.ts +++ b/dmp-frontend/src/app/login/login-page.ts @@ -1,6 +1,7 @@ import { Component, OnInit, NgZone } from '@angular/core'; import {GoogleSignInSuccess} from 'angular-google-signin'; import { Router, ActivatedRoute } from '@angular/router'; +import { TokenService, TokenProvider } from '../services/token.service'; @Component({ selector: 'login-page', @@ -9,12 +10,14 @@ import { Router, ActivatedRoute } from '@angular/router'; }) export class LoginComponent implements OnInit{ returnUrl: string; - public static token : string; + constructor( private route: ActivatedRoute, private router: Router, - private ngZone: NgZone){ + private ngZone: NgZone, + private tokenService : TokenService + ){ } @@ -31,13 +34,29 @@ export class LoginComponent implements OnInit{ let googleUser: gapi.auth2.GoogleUser = event.googleUser; let id: string = googleUser.getId(); let profile: gapi.auth2.BasicProfile = googleUser.getBasicProfile(); - LoginComponent.token = googleUser.getAuthResponse().id_token; + this.tokenService.setToken(googleUser.getAuthResponse().id_token); + console.log('ID: ' + profile.getId()); // Do not send to your backend! Use an ID token instead. console.log('Name: ' + profile.getName()); - console.log('token: ' + LoginComponent.token); + console.log('token: ' + this.tokenService.getToken()); + + this.tokenService.setProvider(TokenProvider.google); + this.tokenService.setLoggedIn(true); + this.tokenService.setEmail(profile.getEmail()); + this.tokenService.setUsername(); //GEMISE AYTO... + + /* AYTA FEYGOUN, xanontai me to refresh tis selidas + localStorage.setItem('currentUser', JSON.stringify(googleUser)); var currentUser = JSON.parse(localStorage.getItem('currentUser')); console.log('current user local storage:' +currentUser) + */ + + // STO LOGOUT, KATHARIZEIS TO tokenService (apo opoudipote... e;inai apo pantou prosvasimo, kai den xanei tis times toy oso exeis to browser anoixto.) + + + + //this.router.navigateByUrl('dynamic-form'); this.ngZone.run(() => this.router.navigateByUrl('projects')); //this.router.navigate(['/projects']); diff --git a/dmp-frontend/src/app/services/server.service.ts b/dmp-frontend/src/app/services/server.service.ts index d515e6888..ce862cce4 100644 --- a/dmp-frontend/src/app/services/server.service.ts +++ b/dmp-frontend/src/app/services/server.service.ts @@ -46,6 +46,8 @@ export class ServerService { //let headers = new HttpHeaders(); let headers = new HttpHeaders().set("google-token", LoginComponent.token); +console.log("google-token: "+ LoginComponent.token); + return this.http.get(this.fetchURL) .map( (response: Response) => { diff --git a/dmp-frontend/src/app/services/token.service.ts b/dmp-frontend/src/app/services/token.service.ts new file mode 100644 index 000000000..5b2bd7897 --- /dev/null +++ b/dmp-frontend/src/app/services/token.service.ts @@ -0,0 +1,77 @@ +import { Injectable, Inject} from '@angular/core'; +import { Observable } from 'rxjs'; +import {LocalStorageService} from 'ngx-webstorage'; +import 'rxjs/add/operator/map'; +import { DOCUMENT } from '@angular/platform-browser'; + +declare var jQuery : any; + +@Injectable() +export class TokenService { + + + constructor (private storage : LocalStorageService, @Inject(DOCUMENT) private document) { + var csrfToken : string = jQuery(document).find('meta[name="csrf-token"]').attr('content'); + this.setCSRFToken(csrfToken); + } + + + getCSRFToken() : string{ + return this.storage.retrieve('csrf-token'); + } + + setCSRFToken(csrfToken : string){ + this.storage.store('csrf-token',csrfToken); + } + + + getProvider() : TokenProvider { + return this.storage.retrieve('provider'); + } + + setProvider(provider : TokenProvider){ + this.storage.store('provider',provider); + } + + getToken() : string{ + return this.storage.retrieve('token'); + } + + setToken(token : string){ + this.storage.store('token',token); + } + + isLoggedIn(){ + return this.storage.retrieve('loggedIn'); + } + + setLoggedIn(boolStatus){ + this.storage.store('loggedIn',boolStatus); + } + + getEmail(){ + return this.storage.retrieve('email'); + } + + setEmail(email){ + this.storage.store('email',email); + } + + getUsername(){ + return this.storage.retrieve('username'); + } + + setUsername(username){ + this.storage.store('username',username); + } + + +} + +export enum TokenProvider { + native, + google +} + + +