From f7ddf59d1c926d4fb0baa50802b15057878ce1d5 Mon Sep 17 00:00:00 2001 From: Will Abson Date: Mon, 16 May 2016 11:24:23 +0100 Subject: [PATCH] Move login component to new v1 API Fixes #65 --- .../src/assets/authentication.service.mock.ts | 2 +- .../src/components/alfresco-login.ts | 4 +- .../src/services/alfresco-authentication.ts | 76 +++++++++---------- 3 files changed, 39 insertions(+), 43 deletions(-) diff --git a/ng2-components/ng2-alfresco-login/src/assets/authentication.service.mock.ts b/ng2-components/ng2-alfresco-login/src/assets/authentication.service.mock.ts index f6c4732714..6a9cd41102 100644 --- a/ng2-components/ng2-alfresco-login/src/assets/authentication.service.mock.ts +++ b/ng2-components/ng2-alfresco-login/src/assets/authentication.service.mock.ts @@ -22,7 +22,7 @@ import { AlfrescoAuthenticationService } from '../../src/services/alfresco-authe export class AuthenticationMock { - login(method: string, username: string, password: string) { + login(username: string, password: string) { if (username === 'fake-username' && password === 'fake-password') { return Observable.of(true); } else { diff --git a/ng2-components/ng2-alfresco-login/src/components/alfresco-login.ts b/ng2-components/ng2-alfresco-login/src/components/alfresco-login.ts index a301c20dd8..b2989f52b6 100644 --- a/ng2-components/ng2-alfresco-login/src/components/alfresco-login.ts +++ b/ng2-components/ng2-alfresco-login/src/components/alfresco-login.ts @@ -33,8 +33,6 @@ declare let __moduleName: string; }) export class AlfrescoLoginComponent { - @Input() - method: string = 'POST'; @Output() onSuccess = new EventEmitter(); @Output() @@ -97,7 +95,7 @@ export class AlfrescoLoginComponent { if (event) { event.preventDefault(); } - this.auth.login(this.method, value.username, value.password) + this.auth.login(value.username, value.password) .subscribe( (token: any) => { try { diff --git a/ng2-components/ng2-alfresco-login/src/services/alfresco-authentication.ts b/ng2-components/ng2-alfresco-login/src/services/alfresco-authentication.ts index c78303d07c..5eb5d57bcd 100644 --- a/ng2-components/ng2-alfresco-login/src/services/alfresco-authentication.ts +++ b/ng2-components/ng2-alfresco-login/src/services/alfresco-authentication.ts @@ -29,7 +29,7 @@ export class AlfrescoAuthenticationService { token: string; private _host: string = 'http://192.168.99.100:8080'; - private _baseUrl: string = this._host + '/alfresco/service/api/'; + private _baseUrl: string = this._host + '/alfresco/api/-default-/public/authentication/versions/1'; /** * Constructor @@ -48,40 +48,13 @@ export class AlfrescoAuthenticationService { } /** - * Method to delegate GET or POST login - * @param method + * Method to delegate to POST login * @param username * @param password * @returns {Observable|Observable} */ - login(method: string, username: string, password: string) { - if (method === 'GET') { - return this.loginGet(username, password); - } else if (method === 'POST') { - return this.loginPost(username, password); - } else { - return Observable.throw('Invalid method name the value should be GET or POST'); - } - } - - /** - * The method provide the login with GET Request - * @param username - * @param password - * @returns {Observable|Observable} - */ - loginGet(username: string, password: string) { - const searchParams = new URLSearchParams(); - searchParams.set('u', username); - searchParams.set('pw', password); - - return this.http.get(this._baseUrl + 'login', {search: searchParams}) - .map((res: any) => { - let data = JSON.parse(xml2json(res.text(), ' ')); - this.token = data.ticket; - this.saveJwt(this.token); - }) - .catch(this.handleError); + login(username: string, password: string) { + return this.loginPost(username, password); } /** @@ -91,22 +64,43 @@ export class AlfrescoAuthenticationService { * @returns {Observable|Observable} */ loginPost(username: string, password: string) { - let credentials = '{ username: ' + username + ', password: ' + password + ' }'; + let credentials = '{ "userId": "' + username + '", "password": "' + password + '" }'; let headers = new Headers(); headers.append('Content-Type', 'application/json'); + headers.append('Accept', 'application/json'); - return this.http.post(this._baseUrl + 'login', credentials, { + return this.http.post(this._baseUrl + '/tickets', credentials, { headers: headers }) .map((res: any) => { let response = res.json(); - this.token = response.data.ticket; + this.token = response.entry.id; this.saveJwt(this.token); }) .catch(this.handleError); } + /** + * Delete the current login ticket from the server + * + * @returns {Observable|Observable} + */ + loginDelete() { + let headers = new Headers(); + headers.append('Content-Type', 'application/json'); + headers.append('Authorization', 'Basic ' + btoa(this.token)); + + return this.http.delete(this._baseUrl + '/tickets/-me-', { + headers: headers + }) + .map((res: any) => { + this.removeJwt(); + this.token = undefined; + }) + .catch(this.handleError); + } + /** * The method save the toke in the localStorage * @param jwt @@ -117,15 +111,19 @@ export class AlfrescoAuthenticationService { } } + /** + * Remove the login token from localStorage + */ + removeJwt() { + localStorage.removeItem('token'); + } + /** * The method remove the token from the local storage * @returns {Observable} */ logout() { - this.token = undefined; - localStorage.removeItem('token'); - - return Observable.of(true); + return this.loginDelete(); } /** @@ -134,7 +132,7 @@ export class AlfrescoAuthenticationService { * @returns {ErrorObservable} */ private handleError(error: Response) { - console.error(error.json().message); + console.error('Error when logging in', error); return Observable.throw(error.json().message || 'Server error'); } }