Advertisement
Guest User

Untitled

a guest
Mar 9th, 2017
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.07 KB | None | 0 0
  1. ---import all modules---
  2. @NgModule({
  3. imports: [
  4. BrowserModule,
  5. FormsModule,
  6. RouterModule.forRoot(routes),
  7. HttpModule,
  8. LoginModule,
  9. DashboardModule,
  10. SignupModule,
  11. InMemoryWebApiModule.forRoot(InMemoryDataService),
  12. // InMemoryWebApiModule.forRoot(InMemoryDataService, { delay: 10 }),
  13. SharedModule.forRoot()
  14. ],
  15. declarations: [
  16. AppComponent,
  17. AlertComponent
  18. ],
  19. providers: [
  20. AppConfig,
  21. AuthGuard,
  22. AlertService,
  23. AuthenticationService,
  24. UserService,
  25. // providers used to create fake backend
  26. // fakeBackendProvider,
  27. MockBackend,
  28. BaseRequestOptions
  29. ],
  30. bootstrap: [AppComponent]
  31. })export class AppModule { }
  32.  
  33. import { Http, BaseRequestOptions, Response, ResponseOptions, RequestMethod } from '@angular/http';
  34. import { MockBackend, MockConnection } from '@angular/http/testing';
  35. export let fakeBackendProvider = {
  36. // use fake backend in place of Http service for backend-less development
  37. provide: Http,
  38. useFactory: function(backend: MockBackend, options: BaseRequestOptions) {
  39. // array in local storage for registered users
  40. let users: any[] = JSON.parse(localStorage.getItem('users')) || [];
  41.  
  42. // configure fake backend
  43. backend.connections.subscribe((connection: MockConnection) => {
  44. // wrap in timeout to simulate server api call
  45. setTimeout(() => {
  46.  
  47. // authenticate
  48. if (connection.request.url.endsWith('/api/authenticate') && connection.request.method === RequestMethod.Post) {
  49. // get parameters from post request
  50. let params = JSON.parse(connection.request.getBody());
  51.  
  52. // find if any user matches login credentials
  53. let filteredUsers = users.filter(user => {
  54. return user.email === params.email && user.password === params.password;
  55. });
  56.  
  57. if (filteredUsers.length) {
  58. // if login details are valid return 200 OK with user details and fake jwt token
  59. let user = filteredUsers[0];
  60. connection.mockRespond(new Response(new ResponseOptions({
  61. status: 200,
  62. body: {
  63. id: user.id,
  64. email: user.email,
  65. firstName: user.firstName,
  66. lastName: user.lastName,
  67. token: 'fake-jwt-token'
  68. }
  69. })));
  70. } else {
  71. // else return 400 bad request
  72. connection.mockError(new Error('Email or password is incorrect'));
  73. }
  74. }
  75.  
  76. // get users
  77. if (connection.request.url.endsWith('/api/users') && connection.request.method === RequestMethod.Get) {
  78. // check for fake auth token in header and return users if valid, this security is implemented server side in a real application
  79. if (connection.request.headers.get('Authorization') === 'Bearer fake-jwt-token') {
  80. connection.mockRespond(new Response(new ResponseOptions({ status: 200, body: users })));
  81. } else {
  82. // return 401 not authorised if token is null or invalid
  83. connection.mockRespond(new Response(new ResponseOptions({ status: 401 })));
  84. }
  85. }
  86.  
  87. // get user by id
  88. if (connection.request.url.match(//api/users/d+$/) && connection.request.method === RequestMethod.Get) {
  89. // check for fake auth token in header and return user if valid, this security is implemented server side in a real application
  90. if (connection.request.headers.get('Authorization') === 'Bearer fake-jwt-token') {
  91. // find user by id in users array
  92. let urlParts = connection.request.url.split('/');
  93. let id = parseInt(urlParts[urlParts.length - 1]);
  94. let matchedUsers = users.filter(user => { return user.id === id; });
  95. let user = matchedUsers.length ? matchedUsers[0] : null;
  96.  
  97. // respond 200 OK with user
  98. connection.mockRespond(new Response(new ResponseOptions({ status: 200, body: user })));
  99. } else {
  100. // return 401 not authorised if token is null or invalid
  101. connection.mockRespond(new Response(new ResponseOptions({ status: 401 })));
  102. }
  103. }
  104.  
  105. // create user
  106. if (connection.request.url.endsWith('/api/users') && connection.request.method === RequestMethod.Post) {
  107. // get new user object from post body
  108. let newUser = JSON.parse(connection.request.getBody());
  109.  
  110. // validation
  111. let duplicateUser = users.filter(user => { return user.email === newUser.email; }).length;
  112. if (duplicateUser) {
  113. return connection.mockError(new Error('Email "' + newUser.email + '" is already taken'));
  114. }
  115.  
  116. // save new user
  117. newUser.id = users.length + 1;
  118. users.push(newUser);
  119. localStorage.setItem('users', JSON.stringify(users));
  120.  
  121. // respond 200 OK
  122. connection.mockRespond(new Response(new ResponseOptions({ status: 200 })));
  123. }
  124.  
  125. // delete user
  126. if (connection.request.url.match(//api/users/d+$/) && connection.request.method === RequestMethod.Delete) {
  127. // check for fake auth token in header and return user if valid, this security is implemented server side in a real application
  128. if (connection.request.headers.get('Authorization') === 'Bearer fake-jwt-token') {
  129. // find user by id in users array
  130. let urlParts = connection.request.url.split('/');
  131. let id = parseInt(urlParts[urlParts.length - 1]);
  132. for (let i = 0; i < users.length; i++) {
  133. let user = users[i];
  134. if (user.id === id) {
  135. // delete user
  136. users.splice(i, 1);
  137. localStorage.setItem('users', JSON.stringify(users));
  138. break;
  139. }
  140. }
  141.  
  142. // respond 200 OK
  143. connection.mockRespond(new Response(new ResponseOptions({ status: 200 })));
  144. } else {
  145. // return 401 not authorised if token is null or invalid
  146. connection.mockRespond(new Response(new ResponseOptions({ status: 401 })));
  147. }
  148. }
  149.  
  150. }, 500);
  151.  
  152. });
  153.  
  154. return new Http(backend, options);
  155. },
  156. deps: [MockBackend, BaseRequestOptions]
  157. };
  158.  
  159. import {InMemoryDbService} from 'angular-in-memory-web-api';
  160. export class InMemoryDataService implements InMemoryDbService {
  161. createDb() {
  162. let user = {
  163. firstName: "Petros",
  164. lastName: "Kontogiannis",
  165. email: "pkontogiannis@accelaero.com",
  166. password: "test123"
  167. }
  168. return {
  169. user
  170. };}}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement