Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- login(username: string, password: string): Observable<Response>
- {
- let body = // whatever it needs to be
- let header = // blah blah
- let ro:RequestOptions = new RequestOptions({
- headers: header
- });
- return this._http.post(Settings.tokenEndpoint, body, ro)
- .map(res => {
- let d = res.json();
- this._storage.set('bdAccessToken', d.access_token);
- this._storage.set('bdRefreshToken', d.refresh_token);
- this._storage.set('bdUserId', this.parseJwt(d.access_token).sub);
- this._storage.set('bdUsername', this.parseJwt(d.access_token).preferred_username);
- return d;
- })
- .catch(error => {
- this.clearAuthData();
- return Observable.throw(error)
- });
- }
- refreshToken():Observable<Response>
- {
- let refToken: string;
- let username: string;
- let p = new Promise((resolve, reject) => {
- this._storage.get('bdRefreshToken').then( v => {
- refToken = v;
- console.log("ref: ", v);
- resolve(v);
- });
- });
- let p2 = new Promise((resolve, reject) => {
- this._storage.get('bdUsername').then(v => {
- username = v;
- console.log("usr: ", v);
- resolve(v);
- });
- });
- return Observable.fromPromise(Promise.all([p, p2]))
- .mergeMap
- (values => {
- let body = //whatever + refresh_token and username are included here...
- let header = new Headers({
- 'Content-Type': 'application/x-www-form-urlencoded'
- });
- let ro:RequestOptions = new RequestOptions({
- headers: header
- });
- return this._http.post(Settings.tokenEndpoint, body, ro)
- //.map(res => res.json())
- .map(data => {
- this._storage.clear();
- let d = data.json();
- this._storage.set('bdAccessToken', d.access_token);
- this._storage.set('bdRefreshToken', d.refresh_token);
- this._storage.set('bdUserId', this.parseJwt(d.access_token).sub);
- this._storage.set('bdUsername', this.parseJwt(d.access_token).preferred_username);
- return data;
- }
- )
- .catch(error => {
- console.log("refresgh Fail");
- this.logout();
- return Observable.throw(error)
- });
- });
- }
- getAccessToken()
- {
- console.log("returning the access token.");
- return this._storage.get('bdAccessToken');
- }
- private getAuthorizedOptions()
- {
- return this._authService.getAccessToken()
- .then(v => {
- let token = v;
- let header = new Headers({
- 'Authorization': 'Bearer '+ token
- });
- let ro = new RequestOptions({
- headers: header
- });
- let options = new RequestOptions();
- if (options.headers) options.headers.delete("Authorization");
- options.headers = header;
- return options;
- });
- }
- get(url:string, options?:RequestOptions): Observable<Response>
- {
- return Observable.fromPromise(this.getAuthorizedOptions())
- .mergeMap((options) =>
- {
- return super.get(url, options)
- .catch(err => {
- if (err && err.status === 401)
- {
- return this._authService.refreshToken()
- .flatMap(r => {
- return Observable.fromPromise(this.getAuthorizedOptions())
- .mergeMap(opt => {
- console.log("opt: ", opt);
- return super.get(url, opt)
- })
- })
- .catch(err2 => {
- console.log("redirecting.");
- this.redirect();
- return Observable.throw(err2);
- });
- }
- else {
- return Observable.throw(err);
- }
- });
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement