unsakini 0.0.4.pre.1 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (223) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -27
  3. data/angular/angular-cli.json +3 -5
  4. data/{public/unsakini/app → angular/dist}/favicon.ico +0 -0
  5. data/angular/dist/index.html +14 -0
  6. data/angular/dist/inline.bundle.js +139 -0
  7. data/angular/dist/inline.map +1 -0
  8. data/angular/dist/main.bundle.js +64689 -0
  9. data/angular/dist/main.map +1 -0
  10. data/angular/dist/styles.bundle.js +364 -0
  11. data/angular/dist/styles.map +1 -0
  12. data/angular/package.json +1 -4
  13. data/angular/src/app/app.component.html +4 -1
  14. data/angular/src/app/app.module.ts +7 -8
  15. data/angular/src/app/app.routes.module.ts +2 -12
  16. data/angular/src/app/index.ts +0 -2
  17. data/angular/src/app/registration/registration.component.html +12 -70
  18. data/angular/src/app/registration/registration.component.spec.ts +11 -8
  19. data/angular/src/app/registration/registration.component.ts +8 -10
  20. data/angular/src/environments/environment.prod.ts +1 -2
  21. data/angular/src/environments/environment.ts +1 -2
  22. data/angular/src/index.html +1 -1
  23. data/angular/src/styles.css +1 -0
  24. data/app/controllers/api/boards_controller.rb +73 -0
  25. data/app/controllers/api/comments_controller.rb +51 -0
  26. data/app/controllers/api/posts_controller.rb +58 -0
  27. data/app/controllers/api/share_board_controller.rb +118 -0
  28. data/app/controllers/api/users_controller.rb +40 -0
  29. data/app/controllers/application_controller.rb +2 -2
  30. data/app/controllers/concerns/board_owner_controller_concern.rb +38 -0
  31. data/app/controllers/concerns/comment_owner_controller_concern.rb +33 -0
  32. data/app/controllers/concerns/logged_in_controller_concern.rb +21 -0
  33. data/app/controllers/concerns/post_owner_controller_concern.rb +36 -0
  34. data/app/controllers/concerns/serializer_controller_concern.rb +11 -0
  35. data/app/controllers/user_token_controller.rb +2 -0
  36. data/app/controllers/web_base_controller.rb +23 -0
  37. data/app/models/application_record.rb +5 -0
  38. data/app/models/board.rb +14 -0
  39. data/app/models/comment.rb +9 -0
  40. data/app/models/concerns/encryptable_model_concern.rb +96 -0
  41. data/app/models/post.rb +12 -0
  42. data/app/models/user.rb +15 -0
  43. data/app/models/user_board.rb +82 -0
  44. data/app/serializers/board_serializer.rb +5 -0
  45. data/app/serializers/{unsakini/comment_serializer.rb → comment_serializer.rb} +3 -6
  46. data/app/serializers/post_serializer.rb +23 -0
  47. data/app/serializers/user_board_serializer.rb +11 -0
  48. data/app/serializers/{unsakini/user_serializer.rb → user_serializer.rb} +2 -5
  49. data/app/views/{unsakini/web → web_base}/index.html.erb +169 -65
  50. data/config/routes.rb +10 -10
  51. data/db/migrate/20161116114222_create_boards.rb +9 -0
  52. data/db/migrate/{20161116200034_create_unsakini_user_boards.rb → 20161116200034_create_user_boards.rb} +2 -3
  53. data/db/migrate/{20161118031023_create_unsakini_posts.rb → 20161118031023_create_posts.rb} +2 -2
  54. data/db/migrate/{20161118100454_create_unsakini_comments.rb → 20161118100454_create_comments.rb} +2 -2
  55. data/db/migrate/20161118221508_add_encrypted_password_to_user_board.rb +5 -0
  56. data/db/migrate/20161122211105_create_users.rb +12 -0
  57. data/db/migrate/20161124102633_add_is_shared_to_boards.rb +5 -0
  58. data/lib/generators/unsakini/angular/USAGE +8 -0
  59. data/lib/generators/unsakini/angular/angular_generator.rb +7 -0
  60. data/lib/generators/unsakini/config/config_generator.rb +1 -3
  61. data/lib/tasks/unsakini_tasks.rake +37 -6
  62. data/lib/unsakini/engine.rb +0 -2
  63. data/lib/unsakini/version.rb +1 -1
  64. data/public/css/custom.css +1 -5
  65. data/public/images/logo.svg +619 -0
  66. data/spec/concerns/models/encryptable_concern.rb +2 -3
  67. data/spec/controllers/{web_controller_spec.rb → web_base_controller_spec.rb} +3 -4
  68. data/spec/dummy/config/application.rb +1 -3
  69. data/spec/dummy/config/environments/development.rb +0 -2
  70. data/spec/dummy/config/initializers/assets.rb +11 -0
  71. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  72. data/spec/dummy/config/initializers/session_store.rb +3 -0
  73. data/spec/dummy/db/development.sqlite3 +0 -0
  74. data/spec/dummy/db/migrate/20161124210219_create_boards.unsakini_engine.rb +10 -0
  75. data/spec/dummy/db/migrate/20161124210220_create_user_boards.unsakini_engine.rb +12 -0
  76. data/spec/dummy/db/migrate/20161124210221_create_posts.unsakini_engine.rb +13 -0
  77. data/spec/dummy/db/migrate/20161124210222_create_comments.unsakini_engine.rb +12 -0
  78. data/spec/dummy/db/migrate/20161124210223_add_encrypted_password_to_user_board.unsakini_engine.rb +6 -0
  79. data/spec/dummy/db/migrate/20161124210224_create_users.unsakini_engine.rb +13 -0
  80. data/spec/dummy/db/migrate/20161124210225_add_is_shared_to_boards.unsakini_engine.rb +6 -0
  81. data/spec/dummy/db/schema.rb +14 -16
  82. data/spec/dummy/db/test.sqlite3 +0 -0
  83. data/spec/dummy/public/app/favicon.ico +0 -0
  84. data/spec/dummy/public/app/index.html +14 -0
  85. data/spec/dummy/public/app/inline.bundle.js +139 -0
  86. data/spec/dummy/public/app/inline.map +1 -0
  87. data/spec/dummy/public/app/main.bundle.js +64689 -0
  88. data/spec/dummy/public/app/main.map +1 -0
  89. data/spec/dummy/public/app/styles.bundle.js +364 -0
  90. data/spec/dummy/public/app/styles.map +1 -0
  91. data/spec/dummy/tmp/unsakini-ng2/LICENSE +21 -0
  92. data/spec/dummy/tmp/unsakini-ng2/README.md +1 -0
  93. data/spec/dummy/tmp/unsakini-ng2/angular-cli.json +59 -0
  94. data/spec/dummy/tmp/unsakini-ng2/e2e/app.e2e-spec.ts +14 -0
  95. data/spec/dummy/tmp/unsakini-ng2/e2e/app.po.ts +11 -0
  96. data/spec/dummy/tmp/unsakini-ng2/e2e/signup.e2e-spec.ts +28 -0
  97. data/spec/dummy/tmp/unsakini-ng2/e2e/signup.po.ts +31 -0
  98. data/spec/dummy/tmp/unsakini-ng2/e2e/tsconfig.json +16 -0
  99. data/spec/dummy/tmp/unsakini-ng2/karma.conf.js +45 -0
  100. data/spec/dummy/tmp/unsakini-ng2/package.json +49 -0
  101. data/spec/dummy/tmp/unsakini-ng2/protractor.conf.js +32 -0
  102. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.css +0 -0
  103. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.html +4 -0
  104. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.spec.ts +47 -0
  105. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.ts +10 -0
  106. data/spec/dummy/tmp/unsakini-ng2/src/app/app.module.ts +29 -0
  107. data/spec/dummy/tmp/unsakini-ng2/src/app/app.routes.module.ts +29 -0
  108. data/spec/dummy/tmp/unsakini-ng2/src/app/index.ts +2 -0
  109. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.css +0 -0
  110. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.html +14 -0
  111. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.spec.ts +157 -0
  112. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.ts +42 -0
  113. data/spec/dummy/tmp/unsakini-ng2/src/environments/environment.prod.ts +3 -0
  114. data/spec/dummy/tmp/unsakini-ng2/src/environments/environment.ts +8 -0
  115. data/spec/dummy/tmp/unsakini-ng2/src/favicon.ico +0 -0
  116. data/spec/dummy/tmp/unsakini-ng2/src/index.html +14 -0
  117. data/spec/dummy/tmp/unsakini-ng2/src/main.ts +12 -0
  118. data/spec/dummy/tmp/unsakini-ng2/src/polyfills.ts +19 -0
  119. data/spec/dummy/tmp/unsakini-ng2/src/styles.css +1 -0
  120. data/spec/dummy/tmp/unsakini-ng2/src/test.ts +31 -0
  121. data/spec/dummy/tmp/unsakini-ng2/src/tsconfig.json +18 -0
  122. data/spec/dummy/tmp/unsakini-ng2/src/typings.d.ts +2 -0
  123. data/spec/dummy/tmp/unsakini-ng2/tslint.json +114 -0
  124. data/spec/dummy/tmp/unsakini-ng2/typings.json +4 -0
  125. data/spec/factories/boards.rb +1 -1
  126. data/spec/factories/comments.rb +1 -1
  127. data/spec/factories/posts.rb +1 -1
  128. data/spec/factories/user_boards.rb +1 -1
  129. data/spec/factories/users.rb +1 -1
  130. data/spec/models/board_spec.rb +2 -2
  131. data/spec/models/comment_spec.rb +2 -2
  132. data/spec/models/post_spec.rb +2 -2
  133. data/spec/models/user_board_spec.rb +19 -19
  134. data/spec/models/user_spec.rb +1 -1
  135. data/spec/requests/{boards/boards_crud_spec.rb → api/boards/api_boards_crud_spec.rb} +26 -26
  136. data/spec/requests/{boards/boards_pagination_spec.rb → api/boards/api_boards_pagination_spec.rb} +7 -7
  137. data/spec/requests/{boards/private_board_spec.rb → api/boards/api_private_board_spec.rb} +26 -26
  138. data/spec/requests/{boards/shared_board_spec.rb → api/boards/api_shared_board_spec.rb} +9 -9
  139. data/spec/requests/{boards/sharing_board_spec.rb → api/boards/api_sharing_board_spec.rb} +13 -13
  140. data/spec/requests/{comments/comments_pagination_spec.rb → api/comments/api_comments_pagination_spec.rb} +3 -3
  141. data/spec/requests/{comments/comments_private_board_spec.rb → api/comments/api_comments_private_board_spec.rb} +20 -20
  142. data/spec/requests/{comments/comments_shared_board_spec.rb → api/comments/api_comments_shared_board_spec.rb} +17 -17
  143. data/spec/requests/{posts/posts_pagination_spec.rb → api/posts/api_posts_pagination_spec.rb} +3 -3
  144. data/spec/requests/{posts/posts_private_board_spec.rb → api/posts/api_posts_private_board_spec.rb} +22 -22
  145. data/spec/requests/{posts/posts_shared_board_spec.rb → api/posts/api_posts_shared_board_spec.rb} +24 -24
  146. data/spec/requests/{user/user_create_spec.rb → api/user/api_user_create_spec.rb} +23 -19
  147. data/spec/requests/{user/user_search_spec.rb → api/user/api_user_search_spec.rb} +9 -9
  148. data/spec/spec_helper.rb +0 -1
  149. data/spec/support/auth_helper.rb +2 -0
  150. metadata +202 -135
  151. data/angular/npm-debug.log +0 -54
  152. data/angular/src/app/confirm-account/confirm-account.component.ts +0 -27
  153. data/angular/src/app/confirm-account/confirm-account.html +0 -41
  154. data/angular/src/app/confirm-account/confirm-account.module.ts +0 -24
  155. data/angular/src/app/confirm-account/confirm-account.scss +0 -3
  156. data/angular/src/app/confirm-account/confirm-account.service.ts +0 -27
  157. data/angular/src/app/confirm-account/index.ts +0 -3
  158. data/angular/src/app/login/index.ts +0 -3
  159. data/angular/src/app/login/login.component.ts +0 -40
  160. data/angular/src/app/login/login.html +0 -43
  161. data/angular/src/app/login/login.module.ts +0 -27
  162. data/angular/src/app/login/login.service.ts +0 -48
  163. data/angular/src/app/registration/index.ts +0 -3
  164. data/angular/src/app/registration/registration.module.ts +0 -23
  165. data/angular/src/app/registration/registration.service.ts +0 -46
  166. data/angular/src/app/registration/registration.services.spec.ts +0 -71
  167. data/angular/src/app/services/auth-http/auth.http.service.ts +0 -35
  168. data/angular/src/app/services/auth-http/index.ts +0 -1
  169. data/angular/src/app/services/http/http.service.spec.ts +0 -205
  170. data/angular/src/app/services/http/http.service.ts +0 -40
  171. data/angular/src/app/services/http/index.ts +0 -1
  172. data/angular/src/app/services/index.ts +0 -3
  173. data/angular/src/app/services/services.module.ts +0 -33
  174. data/angular/src/assets/global.scss +0 -3
  175. data/angular/src/environments/custom.ts +0 -4
  176. data/app/controllers/concerns/unsakini/board_owner_controller_concern.rb +0 -42
  177. data/app/controllers/concerns/unsakini/comment_owner_controller_concern.rb +0 -36
  178. data/app/controllers/concerns/unsakini/logged_in_controller_concern.rb +0 -23
  179. data/app/controllers/concerns/unsakini/post_owner_controller_concern.rb +0 -38
  180. data/app/controllers/concerns/unsakini/serializer_controller_concern.rb +0 -13
  181. data/app/controllers/unsakini/base_controller.rb +0 -6
  182. data/app/controllers/unsakini/boards_controller.rb +0 -76
  183. data/app/controllers/unsakini/comments_controller.rb +0 -54
  184. data/app/controllers/unsakini/posts_controller.rb +0 -61
  185. data/app/controllers/unsakini/share_board_controller.rb +0 -122
  186. data/app/controllers/unsakini/user_token_controller.rb +0 -17
  187. data/app/controllers/unsakini/users_controller.rb +0 -69
  188. data/app/controllers/unsakini/web_controller.rb +0 -27
  189. data/app/mailers/unsakini/user_mailer.rb +0 -13
  190. data/app/models/concerns/unsakini/encryptable_model_concern.rb +0 -97
  191. data/app/models/unsakini/application_record.rb +0 -7
  192. data/app/models/unsakini/board.rb +0 -16
  193. data/app/models/unsakini/comment.rb +0 -12
  194. data/app/models/unsakini/post.rb +0 -15
  195. data/app/models/unsakini/user.rb +0 -43
  196. data/app/models/unsakini/user_board.rb +0 -84
  197. data/app/models/unsakini.rb +0 -5
  198. data/app/serializers/unsakini/board_serializer.rb +0 -7
  199. data/app/serializers/unsakini/post_serializer.rb +0 -26
  200. data/app/serializers/unsakini/user_board_serializer.rb +0 -14
  201. data/app/views/unsakini/user_mailer/confirm_account.html.erb +0 -3
  202. data/db/migrate/20161116114222_create_unsakini_boards.rb +0 -10
  203. data/db/migrate/20161126145352_create_unsakini_users.rb +0 -15
  204. data/lib/generators/unsakini/dependencies/USAGE +0 -5
  205. data/lib/generators/unsakini/dependencies/dependencies_generator.rb +0 -19
  206. data/public/images/unsakini.svg +0 -56
  207. data/public/unsakini/app/448c34a56d699c29117adc64c43affeb.woff2 +0 -0
  208. data/public/unsakini/app/89889688147bd7575d6327160d64e760.svg +0 -288
  209. data/public/unsakini/app/assets/global.scss +0 -3
  210. data/public/unsakini/app/e18bbf611f2a2e43afc071aa2f4e1512.ttf +0 -0
  211. data/public/unsakini/app/f4769f9bdb7466be65088239c12046d1.eot +0 -0
  212. data/public/unsakini/app/fa2772327f55d8198301fdb8bcfc8158.woff +0 -0
  213. data/public/unsakini/app/index.html +0 -14
  214. data/public/unsakini/app/inline.d41d8cd98f00b204e980.bundle.js +0 -2
  215. data/public/unsakini/app/inline.d41d8cd98f00b204e980.bundle.map +0 -1
  216. data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.js +0 -2152
  217. data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.js.gz +0 -0
  218. data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.map +0 -1
  219. data/public/unsakini/app/styles.58e065928ed8ebd0b582.bundle.js +0 -2
  220. data/public/unsakini/app/styles.58e065928ed8ebd0b582.bundle.map +0 -1
  221. data/public/unsakini/app/styles.5dac0e986fce6f8738b300cb558b56a0.bundle.css +0 -8
  222. data/spec/dummy/config/initializers/knock.rb +0 -59
  223. data/spec/schema/jwt.json +0 -9
@@ -1,205 +0,0 @@
1
- /* tslint:disable:no-unused-variable */
2
-
3
- import { TestBed, async, inject } from '@angular/core/testing';
4
- import { Http, BaseRequestOptions, Response, ResponseOptions, Headers, RequestMethod } from '@angular/http';
5
- import { MockBackend } from '@angular/http/testing';
6
- import { HttpService} from '.';
7
- import { environment } from '../../../environments/environment';
8
-
9
- describe('HttpService', () => {
10
- beforeEach(() => {
11
- TestBed.configureTestingModule({
12
- providers: [
13
- HttpService,
14
- BaseRequestOptions,
15
- MockBackend,
16
- {
17
- provide: Http,
18
- useFactory: (backend, defaultOptions) => { return new Http(backend, defaultOptions) },
19
- deps: [MockBackend, BaseRequestOptions]
20
- },
21
- ]
22
- });
23
- });
24
-
25
- it('should be defined', inject([HttpService], (service: HttpService) => {
26
- expect(service).toBeTruthy();
27
- }));
28
-
29
- describe('Append base api url /', () => {
30
-
31
- let expectMethod = (method: string) => {
32
-
33
- it(`appends base api url to the ${method} request`, inject([HttpService, MockBackend], (service: HttpService, backend: MockBackend) => {
34
-
35
- service.base_url = '/'
36
- let request_url = '/hello/world'
37
-
38
- backend.connections.subscribe((c) => {
39
- expect(c.request.url).toEqual((request_url))
40
- c.mockRespond(new Response(new ResponseOptions({ body: 'fake response' })))
41
- })
42
-
43
- if (method === 'post' || method === 'put' || method === 'patch')
44
- service[method](request_url, {}).subscribe()
45
- else
46
- service[method](request_url).subscribe()
47
- }));
48
-
49
- }
50
-
51
- let methods = ['post', 'get', 'put', 'patch', 'delete']
52
-
53
- for (let i = methods.length - 1; i >= 0; i--) {
54
- expectMethod(methods[i])
55
- }
56
-
57
- })
58
-
59
- describe('Base url is http://domain.com', () => {
60
-
61
- let expectMethod = (method: string) => {
62
-
63
- it(`appends base api url to the ${method} request`, inject([HttpService, MockBackend], (service: HttpService, backend: MockBackend) => {
64
- let domain = 'http://domain.com'
65
- service.base_url = domain
66
- let request_url = '/hello/world'
67
-
68
- backend.connections.subscribe((c) => {
69
- expect(c.request.url).toEqual(`${domain}${request_url}`)
70
- c.mockRespond(new Response(new ResponseOptions({ body: 'fake response' })))
71
- })
72
-
73
- if (method === 'post' || method === 'put' || method === 'patch')
74
- service[method](request_url, {}).subscribe()
75
- else
76
- service[method](request_url).subscribe()
77
-
78
- }));
79
-
80
- }
81
-
82
- let methods = ['post', 'get', 'put', 'patch', 'delete']
83
-
84
- for (let i = methods.length - 1; i >= 0; i--) {
85
- expectMethod(methods[i])
86
- }
87
-
88
- })
89
-
90
- describe('Base url is http://domain.com/, with /', () => {
91
-
92
- let expectMethod = (method: string) => {
93
-
94
- it(`appends base api url to the ${method} request`, inject([HttpService, MockBackend], (service: HttpService, backend: MockBackend) => {
95
- let domain = 'http://domain.com'
96
- service.base_url = domain + '/'
97
- let request_url = '/hello/world'
98
-
99
- backend.connections.subscribe((c) => {
100
- expect(c.request.url).toEqual(`${domain}${request_url}`)
101
- c.mockRespond(new Response(new ResponseOptions({ body: 'fake response' })))
102
- })
103
-
104
- if (method === 'post' || method === 'put' || method === 'patch')
105
- service[method](request_url, {}).subscribe()
106
- else
107
- service[method](request_url).subscribe()
108
-
109
- }));
110
-
111
- }
112
-
113
- let methods = ['post', 'get', 'put', 'patch', 'delete']
114
-
115
- for (let i = methods.length - 1; i >= 0; i--) {
116
- expectMethod(methods[i])
117
- }
118
-
119
- })
120
-
121
- describe('Base url dont begin with forward slash (/)', () => {
122
-
123
- let expectMethod = (method: string) => {
124
-
125
- it(`appends base api url to the ${method} request`, inject([HttpService, MockBackend], (service: HttpService, backend: MockBackend) => {
126
- let domain = 'http://domain.com'
127
- service.base_url = domain + '/'
128
- let request_url = 'hello/world'
129
-
130
- backend.connections.subscribe((c) => {
131
- expect(c.request.url).toEqual(`${domain}/${request_url}`)
132
- c.mockRespond(new Response(new ResponseOptions({ body: 'fake response' })))
133
- })
134
-
135
- if (method === 'post' || method === 'put' || method === 'patch')
136
- service[method](request_url, {}).subscribe()
137
- else
138
- service[method](request_url).subscribe()
139
-
140
- }));
141
-
142
- }
143
-
144
- let methods = ['post', 'get', 'put', 'patch', 'delete']
145
-
146
- for (let i = methods.length - 1; i >= 0; i--) {
147
- expectMethod(methods[i])
148
- }
149
-
150
- })
151
-
152
- // describe('Registration', () => {
153
-
154
- // it('jsonizes error', inject([HttpService, MockBackend], (service: HttpService, backend: MockBackend) => {
155
-
156
- // let errors = ['name cant be blank']
157
-
158
- // let mockResponse = new Response(new ResponseOptions({
159
- // status: 422,
160
- // body: errors
161
- // }))
162
-
163
- // backend.connections.subscribe(c => c.mockError(mockResponse));
164
-
165
- // let acct: IAccount = {
166
- // name: '',
167
- // email: '',
168
- // password: '',
169
- // password_confirmation: ''
170
- // }
171
-
172
- // service.registerAccount(acct).subscribe(
173
- // (res) => {},
174
- // (res) => {
175
- // expect(res).toEqual(errors)
176
- // })
177
-
178
- // }));
179
-
180
- // it('handles success response', inject([HttpService, MockBackend], (service: HttpService, backend: MockBackend) => {
181
-
182
- // let acct: IAccount = {
183
- // name: '',
184
- // email: '',
185
- // password: '',
186
- // password_confirmation: ''
187
- // }
188
-
189
-
190
- // let mockResponse = new Response(new ResponseOptions({
191
- // status: 422,
192
- // body: acct
193
- // }))
194
-
195
- // backend.connections.subscribe(c => c.mockRespond(mockResponse));
196
- // service.registerAccount(acct).subscribe(
197
- // (res) => {
198
- // expect(res).toBe(acct)
199
- // })
200
-
201
- // }));
202
-
203
- // });
204
-
205
- });
@@ -1,40 +0,0 @@
1
-
2
- import { environment } from '../../../environments/environment';
3
- import {Injectable} from '@angular/core';
4
- import {Http, XHRBackend, RequestOptions, Request, RequestOptionsArgs, Response, Headers} from '@angular/http';
5
- import {Observable} from 'rxjs/Observable';
6
- import 'rxjs/add/operator/catch';
7
- import 'rxjs/add/operator/map';
8
-
9
- @Injectable()
10
-
11
- export class HttpService extends Http {
12
-
13
- base_url = environment.api_base_url;
14
- engine_url = '/unsakini'
15
-
16
- constructor (backend: XHRBackend, options: RequestOptions) {
17
- super(backend, options);
18
- }
19
-
20
- getAuthToken (){
21
- localStorage.getItem('auth_token');
22
- }
23
-
24
- request(url: string|Request, options?: RequestOptionsArgs): Observable<Response> {
25
- if (typeof url === 'string') {
26
- url = this.buildUrl(url);
27
- } else {
28
- url.url = this.buildUrl(url.url);
29
- }
30
- return super.request(url, options);
31
- }
32
-
33
- buildUrl(url: string) {
34
- let new_url = `${this.base_url}/${this.engine_url}/${url}`;
35
- // remove multiple forward slash from the url like:
36
- // http://domain.com//hello/world -> http://domain.com/hello/world
37
- return new_url.replace(/([^:]\/)\/+/g, "$1").replace(/(^\/)\/+/g, "$1");
38
- }
39
-
40
- }
@@ -1 +0,0 @@
1
- export * from './http.service';
@@ -1,3 +0,0 @@
1
- export * from './auth-http/'
2
- export * from './http'
3
- export * from './services.module'
@@ -1,33 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { HttpModule, XHRBackend, RequestOptions } from '@angular/http';
3
-
4
- import { HttpService } from './http/http.service';
5
- import { AuthHttpService } from './auth-http/auth.http.service';
6
-
7
- @NgModule({
8
- imports: [
9
- HttpModule
10
- ],
11
- declarations: [
12
- ],
13
- providers: [
14
- {
15
- provide: HttpService,
16
- useFactory: (backend: XHRBackend, options: RequestOptions) => {
17
- return new HttpService(backend, options)
18
- },
19
- deps: [ XHRBackend, RequestOptions]
20
- },
21
- {
22
- provide: AuthHttpService,
23
- useFactory: (backend: XHRBackend, options: RequestOptions) => {
24
- return new HttpService(backend, options)
25
- },
26
- deps: [ XHRBackend, RequestOptions]
27
- }
28
- ],
29
- exports: [
30
- HttpModule
31
- ]
32
- })
33
- export class ServicesModule { }
@@ -1,3 +0,0 @@
1
- [hidden] {
2
- display: none;
3
- }
@@ -1,4 +0,0 @@
1
- export const environment = {
2
- production: true,
3
- api_base_url: ''
4
- };
@@ -1,42 +0,0 @@
1
- module Unsakini
2
- #Ensure user has access to the board and sets the `@board` variable in the controller
3
-
4
- module BoardOwnerControllerConcern
5
- extend ActiveSupport::Concern
6
-
7
- #Ensure user has access to the board and sets the `@board` variable in the controller
8
- def ensure_board
9
- board_id = params[:board_id] || params[:id]
10
- result = has_board_access(board_id)
11
- @board = result[:board]
12
- @user_board = result[:user_board]
13
- head result[:status] if result[:status] != :ok
14
- end
15
-
16
- # Validate if user has access to board
17
- #
18
- # @param board_id [Integer] board id
19
- def has_board_access(board_id)
20
- board = nil
21
- if !board_id.nil?
22
- board = Unsakini::Board.find_by_id(board_id)
23
- else
24
- return {status: :bad_request}
25
- end
26
- if (board)
27
- user_board = Unsakini::UserBoard.where(user_id: @user.id, board_id: board_id).first
28
- return {status: :forbidden } if user_board.nil?
29
- return {status: :ok, board: board, user_board: user_board}
30
- else
31
- return {status: :not_found}
32
- end
33
- end
34
-
35
- #Ensures user is owner of the board. Must be run after {#ensure_board} method.
36
- def ensure_board_owner
37
- render json: {}, status: :forbidden if !@user_board.is_admin
38
- end
39
-
40
- end
41
-
42
- end
@@ -1,36 +0,0 @@
1
- module Unsakini
2
- # Ensures user is owner of the comment and sets the `@comment` variable in the controllers
3
- module CommentOwnerControllerConcern
4
- extend ActiveSupport::Concern
5
-
6
- # Ensures user is owner of the comment and sets the `@comment` variable in the controllers
7
- def ensure_comment
8
- post_id = params[:post_id]
9
- comment_id = params[:comment_id] || params[:id]
10
- result = has_comment_access post_id, comment_id
11
- @comment = result[:comment]
12
- status = result[:status]
13
- head status if status != :ok
14
- end
15
-
16
- # Validate if user has access to comment in the post
17
- #
18
- # @param post_id [Integer] post id
19
- # @param comment_id [Integer] comment id
20
- def has_comment_access(post_id, comment_id)
21
- comment = Unsakini::Comment.where(id: comment_id, post_id: post_id, user_id: @user.id).first
22
- if comment.nil?
23
- return {status: :forbidden, comment: comment}
24
- else
25
- return {status: :ok, comment: comment}
26
- end
27
- end
28
-
29
- # Ensures user is the owner of the comment. Must be run after {#ensure_comment} method.
30
- def ensure_comment_owner
31
- render json: {}, status: :forbidden if @comment.user_id != @user.id
32
- end
33
-
34
- end
35
-
36
- end
@@ -1,23 +0,0 @@
1
- # Ensures users are logged in and sets `@user` instance variable in the controllers.
2
- # This is included in the base api controller.
3
- #
4
- # Returns `401` error if user is not authenticated
5
- module Unsakini
6
- module LoggedInControllerConcern
7
- extend ActiveSupport::Concern
8
-
9
- included do
10
- include Knock::Authenticable
11
- before_action :ensure_logged_in
12
- end
13
-
14
- private
15
-
16
- def ensure_logged_in
17
- authenticate_for Unsakini::User
18
- @user = current_unsakini_user
19
- head :unauthorized unless @user
20
- end
21
-
22
- end
23
- end
@@ -1,38 +0,0 @@
1
- # Ensures user is owner of the post and sets the `@post` variable in the controllers
2
- module Unsakini
3
- module PostOwnerControllerConcern
4
- extend ActiveSupport::Concern
5
-
6
- # Ensures user is owner of the post and sets the `@post` variable in the controllers
7
- def ensure_post
8
- post_id = params[:post_id] || params[:id]
9
- board_id = params[:board_id]
10
- result = has_post_access(board_id, post_id)
11
- status = result[:status]
12
- @post = result[:post]
13
- head status if status != :ok
14
- end
15
-
16
- # Validate if user has access to the post in the board
17
- #
18
- # @param board_id [Integer] board id
19
- # @param post_id [Integer] post id
20
- def has_post_access(board_id, post_id)
21
- post = Unsakini::Post.where(id: post_id, board_id: board_id)
22
- .joins("LEFT JOIN #{UserBoard.table_name} ON #{UserBoard.table_name}.board_id = #{Post.table_name}.board_id")
23
- .where("#{UserBoard.table_name}.user_id = ?", @user.id)
24
- .first
25
- if post.nil?
26
- return {status: :forbidden}
27
- else
28
- return {status: :ok, post: post}
29
- end
30
- end
31
-
32
- # Ensures user is owner of the post. Must be run after {#ensure_post}`.
33
- def ensure_post_owner
34
- render json: {}, status: :forbidden if @post.user_id != @user.id
35
- end
36
-
37
- end
38
- end
@@ -1,13 +0,0 @@
1
- module Unsakini
2
- module SerializerControllerConcern
3
-
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- include ::ActionController::Serialization
8
- end
9
-
10
-
11
- end
12
-
13
- end
@@ -1,6 +0,0 @@
1
- # Base controller for API controllers
2
- module Unsakini
3
- class BaseController < ActionController::API
4
-
5
- end
6
- end
@@ -1,76 +0,0 @@
1
-
2
- module Unsakini
3
- class BoardsController < BaseController
4
-
5
- include LoggedInControllerConcern
6
- include SerializerControllerConcern
7
- include BoardOwnerControllerConcern
8
- include ::ActionController::Serialization
9
-
10
- before_action :ensure_board, :only => [:show, :update, :destroy]
11
- before_action :ensure_board_owner, :only => [:update, :destroy]
12
-
13
- # Returns boards belonging to current user
14
- #
15
- # `GET /api/boards`
16
- #
17
- def index
18
- admin = true
19
- shared = false
20
- admin = params[:is_admin] == 'true' if params[:admin]
21
- shared = params[:shared] == 'true' if params[:shared]
22
- result = @user.user_boards.shared(shared)
23
- result = result.admin if admin
24
- paginate json: result, per_page: 10
25
- end
26
-
27
- # Creates board belonging to current user.
28
- #
29
- # `POST /api/boards`
30
- #
31
- def create
32
- @user_board = UserBoard.new(
33
- name: params[:board][:name],
34
- user_id: @user.id,
35
- encrypted_password: params[:encrypted_password],
36
- is_admin: true
37
- )
38
- if @user_board.save
39
- render json: @user_board, status: :created
40
- else
41
- render json: @user_board.errors.full_messages, status: 422
42
- end
43
-
44
- end
45
-
46
- # Render a single board.
47
- #
48
- # `GET /api/boards/:id`
49
- #
50
- def show
51
- render json: @user_board
52
- end
53
-
54
- # Updates a single board.
55
- #
56
- # `PUT /api/boards/:id`
57
- def update
58
- if @user_board.update(name: params[:board][:name], encrypted_password: params[:encrypted_password])
59
- render json: @user_board
60
- else
61
- errors = @board.errors.full_messages.concat @user_board.errors.full_messages
62
- render json: errors, status: 422
63
- end
64
- end
65
-
66
- # Deletes a board resource.
67
- #
68
- # `DELETE /api/boards/:id`
69
- def destroy
70
- @board.destroy
71
- render json: {}, status: :ok
72
- end
73
-
74
- end
75
-
76
- end
@@ -1,54 +0,0 @@
1
- module Unsakini
2
- class CommentsController < BaseController
3
-
4
- include LoggedInControllerConcern
5
- include PostOwnerControllerConcern
6
- include CommentOwnerControllerConcern
7
- include ::ActionController::Serialization
8
-
9
- before_action :ensure_post, only: [:index, :create]
10
- before_action :ensure_comment, only: [:show, :update, :destroy]
11
- before_action :ensure_comment_owner, only: [:update, :destroy]
12
-
13
- # Renders the comments belonging to the post
14
- #
15
- # `GET /api/boards/:board_id/posts/:post_id/`
16
- def index
17
- paginate json: @post.comments.page(params[:page]), per_page: 20
18
- end
19
-
20
- # Creates new comment belonging to the post
21
- #
22
- # `POST /api/boards/:board_id/posts/:post_id/`
23
- def create
24
- @comment = Comment.new(params.permit(:content))
25
- @comment.user = @user
26
- @comment.post = @post
27
- if @comment.save
28
- render json: @comment
29
- else
30
- render json: @comment.errors, status: 422
31
- end
32
- end
33
-
34
- # Updates a comment
35
- #
36
- # `PUT /api/boards/:board_id/posts/:post_id/comments/:id`
37
- def update
38
- if @comment.update(params.permit(:content))
39
- render json: @comment
40
- else
41
- render json: @comment.errors, status: 422
42
- end
43
- end
44
-
45
- # Deletes a comment
46
- #
47
- # `DELETE /api/boards/:board_id/posts/:post_id/comments/:id`
48
- def destroy
49
- @comment.destroy
50
- render json: {}, status: :ok
51
- end
52
- end
53
-
54
- end
@@ -1,61 +0,0 @@
1
- module Unsakini
2
- class PostsController < BaseController
3
-
4
- include LoggedInControllerConcern
5
- include BoardOwnerControllerConcern
6
- include PostOwnerControllerConcern
7
- include ::ActionController::Serialization
8
-
9
- before_action :ensure_board, only: [:index, :create]
10
- before_action :ensure_post, only: [:show, :update, :destroy]
11
- before_action :ensure_post_owner, only: [:update, :destroy]
12
-
13
- # Renders the post belonging to the board
14
- #
15
- # `GET /api/boards/:board_id/posts`
16
- def index
17
- paginate json: @board.posts.page(params[:page]), per_page: 20
18
- end
19
-
20
- # Renders a single post belonging to the board
21
- #
22
- # `GET /api/boards/:board_id/posts/:id`
23
- def show
24
- render json: @post
25
- end
26
-
27
- # Creates a single post belonging to the board
28
- #
29
- # `POST /api/boards/:board_id/posts/`
30
- def create
31
- @post = Post.new(params.permit(:title, :content, :board_id))
32
- @post.user = @user
33
- if (@post.save)
34
- render json: @post, status: :created
35
- else
36
- render json: @post.errors, status: 422
37
- end
38
- end
39
-
40
- # Updates a single post belonging to the board
41
- #
42
- # `PUT /api/boards/:board_id/posts/:id`
43
- def update
44
- if (@post.update(params.permit(:title, :content)))
45
- render json: @post, status: :ok
46
- else
47
- render json: @post.errors, status: 422
48
- end
49
- end
50
-
51
- # Deletes a single post belonging to the board
52
- #
53
- # `DELETE /api/boards/:board_id/posts/:id`
54
- def destroy
55
- @post.destroy
56
- render json: {}, status: :ok
57
- end
58
-
59
- end
60
-
61
- end