auth.service.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. import {Injectable} from '@angular/core';
  2. import {Observable} from 'rxjs/Observable';
  3. import {Http} from '@angular/http';
  4. import {Headers} from '@angular/http';
  5. import {CookieService} from 'ngx-cookie-service';
  6. import {User, UsersService} from '../resorcess/users.service';
  7. import {RolesService} from '../resorcess/roles.service';
  8. import {Router} from '@angular/router';
  9. import {environment} from '../../../environments/environment';
  10. import {Dialog} from '../base_components/dialog/dialog';
  11. @Injectable()
  12. export class AuthService {
  13. auth: AuthService;
  14. private _currentUser: User;
  15. private _auth_token: string;
  16. /**
  17. * وقتی برنامه رفرش میشه به صورت پیش فرض ture هست وقتی init اجرا میشه false میشه دیگه تا وثتی که رفرش نشه init بررسی نمیشه و لاگین باقی میمونه
  18. */
  19. needToRunInit = true;
  20. /**
  21. * @param {Http} http baray darkhadt hay http estefade mishe
  22. * @param {CookieService} cookieService baray save kardan token
  23. * @param router
  24. * @param userService
  25. * @param roleService
  26. * @param dialog
  27. * @param toasterService
  28. */
  29. constructor(private http: Http,
  30. private cookieService: CookieService,
  31. private router: Router,
  32. private userService: UsersService,
  33. private roleService: RolesService,
  34. private dialog: Dialog,
  35. ) {
  36. this.roleService.register();
  37. }
  38. get auth_token(): string {
  39. return this.cookieService.get('token');
  40. }
  41. set auth_token(value: string) {
  42. this._auth_token = value;
  43. }
  44. get currentUser(): User {
  45. return this._currentUser;
  46. }
  47. set currentUser(value: User) {
  48. this._currentUser = value;
  49. }
  50. /**
  51. *
  52. * @param username email user hast
  53. * @param password
  54. * @param type requestType user hast mesl dr ya parastar
  55. * @param cloud_token
  56. * @param remember
  57. * @returns {Observable<boolean>}
  58. */
  59. loginWithPassword(mobile, password, remember): Observable<boolean> {
  60. const headers = new Headers();
  61. headers.append('Content-Type', 'application/x-www-form-urlencoded');
  62. return this.http.post(environment.app_url + 'login',
  63. 'mobile=' + (mobile) + '&password=' + (password)
  64. ,
  65. {headers: headers})
  66. .map(res => res.json())
  67. .map(res => {
  68. if (res) {
  69. this.setLoginParams(res, remember, true);
  70. }
  71. return this.isLoggedIn();
  72. });
  73. }
  74. loginWithSmsToken(mobile, sms_token, remember): Observable<boolean> {
  75. const headers = new Headers();
  76. headers.append('Content-Type', 'application/x-www-form-urlencoded');
  77. return this.http.post(environment.app_url + 'login',
  78. 'mobile=' + (mobile) + '&sms_token=' + (sms_token)
  79. ,
  80. {headers: headers})
  81. .map(res => res.json())
  82. .map(res => {
  83. if (res) {
  84. this.setLoginParams(res, remember, true);
  85. }
  86. return this.isLoggedIn();
  87. });
  88. }
  89. /**
  90. * auth token
  91. */
  92. setToken(token: string, remember: boolean) {
  93. if (token === '') {
  94. this.cookieService.delete('token');
  95. } else {
  96. this.cookieService.set('token', token, remember ? 60 : 0);
  97. }
  98. }
  99. isLoggedIn(): boolean {
  100. return !!this.currentUser;
  101. }
  102. logout() {
  103. this.currentUser = null;
  104. this.setToken('', false);
  105. if (!this.isLoggedIn()) {
  106. this.router.navigateByUrl('/auth/passwordSignin');
  107. } else {
  108. this.router.navigateByUrl('');
  109. return false;
  110. }
  111. }
  112. convertUserFromText(userString: string): User {
  113. const userObj = this.userService.new();
  114. if (userString !== 'null') {
  115. this.userService.convert(JSON.parse(userString), userObj);
  116. }
  117. return userObj;
  118. }
  119. /**
  120. *
  121. * @returns {Observable<boolean>}
  122. */
  123. init(): Promise<boolean> {
  124. const headers = new Headers();
  125. headers.append('Content-Type', 'application/x-www-form-urlencoded');
  126. headers.append('Accept', 'application/vnd.api+json');
  127. headers.append('Authorization', 'Bearer ' + this.auth_token);
  128. return this.http.post(environment.app_url + 'init', {},
  129. {headers: headers})
  130. .toPromise()
  131. .then(response => {
  132. response = response.json();
  133. this.setLoginParams(response, null, false);
  134. if (this.isLoggedIn()) {
  135. return Promise.resolve(true);
  136. } else {
  137. return Promise.reject(false);
  138. }
  139. }).catch(reason => {
  140. console.log('reason is', reason);
  141. this.needToRunInit = false;
  142. return Promise.reject(false);
  143. });
  144. }
  145. // in tabe request id va status ro mifreste be server
  146. /***
  147. *
  148. * @param loginResponse رسپانس init و login هست
  149. * @param remember این واسه ی مرا بخاطر بسپار هست
  150. * @param fromLogin سرور در صورتی به ما توکن میده که لاگین کنیم اینجا میگه اگه لاگین بود توکن ست کن
  151. */
  152. setLoginParams(loginResponse, remember?: boolean, fromLogin?: boolean) {
  153. this.needToRunInit = false;
  154. this.currentUser = this.convertUserFromText(loginResponse['user']);
  155. if (remember == null) {
  156. remember = false;
  157. }
  158. if (fromLogin) {
  159. this.setToken(loginResponse['token'], remember);
  160. }
  161. localStorage.setItem('basics', JSON.stringify(loginResponse['basics']));
  162. localStorage.setItem('columns', JSON.stringify(loginResponse['columns']));
  163. }
  164. mobileExists(mobile, type): Observable<any> {
  165. const headers = new Headers();
  166. headers.append('Content-Type', 'application/x-www-form-urlencoded');
  167. headers.append('Accept', 'application/vnd.api+json');
  168. return this.http.post(environment.app_url + 'mobileExists',
  169. 'mobile=' + (mobile) + '&type=' + (type), {headers: headers});
  170. }
  171. }