Advertisement
Guest User

Untitled

a guest
Aug 12th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.76 KB | None | 0 0
  1. login(username: string, password: string): Observable<Response>
  2. {
  3. let body = // whatever it needs to be
  4. let header = // blah blah
  5. let ro:RequestOptions = new RequestOptions({
  6. headers: header
  7. });
  8.  
  9. return this._http.post(Settings.tokenEndpoint, body, ro)
  10. .map(res => {
  11. let d = res.json();
  12. this._storage.set('bdAccessToken', d.access_token);
  13. this._storage.set('bdRefreshToken', d.refresh_token);
  14. this._storage.set('bdUserId', this.parseJwt(d.access_token).sub);
  15. this._storage.set('bdUsername', this.parseJwt(d.access_token).preferred_username);
  16. return d;
  17. })
  18. .catch(error => {
  19. this.clearAuthData();
  20. return Observable.throw(error)
  21. });
  22. }
  23.  
  24.  
  25. refreshToken():Observable<Response>
  26. {
  27. let refToken: string;
  28. let username: string;
  29. let p = new Promise((resolve, reject) => {
  30. this._storage.get('bdRefreshToken').then( v => {
  31. refToken = v;
  32. console.log("ref: ", v);
  33. resolve(v);
  34. });
  35. });
  36.  
  37. let p2 = new Promise((resolve, reject) => {
  38. this._storage.get('bdUsername').then(v => {
  39. username = v;
  40. console.log("usr: ", v);
  41. resolve(v);
  42. });
  43. });
  44.  
  45.  
  46. return Observable.fromPromise(Promise.all([p, p2]))
  47. .mergeMap
  48. (values => {
  49. let body = //whatever + refresh_token and username are included here...
  50. let header = new Headers({
  51. 'Content-Type': 'application/x-www-form-urlencoded'
  52. });
  53. let ro:RequestOptions = new RequestOptions({
  54. headers: header
  55. });
  56. return this._http.post(Settings.tokenEndpoint, body, ro)
  57. //.map(res => res.json())
  58. .map(data => {
  59. this._storage.clear();
  60. let d = data.json();
  61. this._storage.set('bdAccessToken', d.access_token);
  62. this._storage.set('bdRefreshToken', d.refresh_token);
  63. this._storage.set('bdUserId', this.parseJwt(d.access_token).sub);
  64. this._storage.set('bdUsername', this.parseJwt(d.access_token).preferred_username);
  65. return data;
  66. }
  67. )
  68. .catch(error => {
  69. console.log("refresgh Fail");
  70. this.logout();
  71. return Observable.throw(error)
  72. });
  73. });
  74. }
  75.  
  76. getAccessToken()
  77. {
  78. console.log("returning the access token.");
  79. return this._storage.get('bdAccessToken');
  80. }
  81.  
  82. private getAuthorizedOptions()
  83. {
  84. return this._authService.getAccessToken()
  85. .then(v => {
  86. let token = v;
  87. let header = new Headers({
  88. 'Authorization': 'Bearer '+ token
  89. });
  90. let ro = new RequestOptions({
  91. headers: header
  92. });
  93. let options = new RequestOptions();
  94. if (options.headers) options.headers.delete("Authorization");
  95. options.headers = header;
  96. return options;
  97. });
  98. }
  99.  
  100.  
  101. get(url:string, options?:RequestOptions): Observable<Response>
  102. {
  103. return Observable.fromPromise(this.getAuthorizedOptions())
  104. .mergeMap((options) =>
  105. {
  106. return super.get(url, options)
  107. .catch(err => {
  108. if (err && err.status === 401)
  109. {
  110. return this._authService.refreshToken()
  111. .flatMap(r => {
  112. return Observable.fromPromise(this.getAuthorizedOptions())
  113. .mergeMap(opt => {
  114. console.log("opt: ", opt);
  115. return super.get(url, opt)
  116. })
  117. })
  118. .catch(err2 => {
  119. console.log("redirecting.");
  120. this.redirect();
  121. return Observable.throw(err2);
  122. });
  123. }
  124. else {
  125. return Observable.throw(err);
  126. }
  127. });
  128. });
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement