unsakini 0.0.4.2 → 0.0.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (222) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +26 -0
  3. data/angular/angular-cli.json +5 -3
  4. data/angular/npm-debug.log +54 -0
  5. data/angular/package.json +4 -1
  6. data/angular/src/app/app.component.html +1 -4
  7. data/angular/src/app/app.module.ts +8 -7
  8. data/angular/src/app/app.routes.module.ts +12 -2
  9. data/angular/src/app/confirm-account/confirm-account.component.ts +27 -0
  10. data/angular/src/app/confirm-account/confirm-account.html +41 -0
  11. data/angular/src/app/confirm-account/confirm-account.module.ts +24 -0
  12. data/angular/src/app/confirm-account/confirm-account.scss +3 -0
  13. data/angular/src/app/confirm-account/confirm-account.service.ts +27 -0
  14. data/angular/src/app/confirm-account/index.ts +3 -0
  15. data/angular/src/app/index.ts +2 -0
  16. data/angular/src/app/login/index.ts +3 -0
  17. data/angular/src/app/login/login.component.ts +40 -0
  18. data/angular/src/app/login/login.html +43 -0
  19. data/angular/src/app/login/login.module.ts +27 -0
  20. data/angular/src/app/login/login.service.ts +48 -0
  21. data/angular/src/app/registration/index.ts +3 -0
  22. data/angular/src/app/registration/registration.component.html +70 -12
  23. data/angular/src/app/registration/registration.component.spec.ts +8 -11
  24. data/angular/src/app/registration/registration.component.ts +10 -8
  25. data/angular/src/app/registration/registration.module.ts +23 -0
  26. data/angular/src/app/registration/registration.service.ts +46 -0
  27. data/angular/src/app/registration/registration.services.spec.ts +71 -0
  28. data/angular/src/app/services/auth-http/auth.http.service.ts +35 -0
  29. data/angular/src/app/services/auth-http/index.ts +1 -0
  30. data/angular/src/app/services/http/http.service.spec.ts +205 -0
  31. data/angular/src/app/services/http/http.service.ts +40 -0
  32. data/angular/src/app/services/http/index.ts +1 -0
  33. data/angular/src/app/services/index.ts +3 -0
  34. data/angular/src/app/services/services.module.ts +33 -0
  35. data/angular/src/assets/global.scss +3 -0
  36. data/angular/src/environments/custom.ts +4 -0
  37. data/angular/src/environments/environment.prod.ts +2 -1
  38. data/angular/src/environments/environment.ts +2 -1
  39. data/angular/src/index.html +1 -1
  40. data/app/controllers/application_controller.rb +2 -2
  41. data/app/controllers/concerns/unsakini/board_owner_controller_concern.rb +42 -0
  42. data/app/controllers/concerns/unsakini/comment_owner_controller_concern.rb +36 -0
  43. data/app/controllers/concerns/unsakini/logged_in_controller_concern.rb +23 -0
  44. data/app/controllers/concerns/unsakini/post_owner_controller_concern.rb +38 -0
  45. data/app/controllers/concerns/unsakini/serializer_controller_concern.rb +13 -0
  46. data/app/controllers/unsakini/base_controller.rb +6 -0
  47. data/app/controllers/unsakini/boards_controller.rb +76 -0
  48. data/app/controllers/unsakini/comments_controller.rb +54 -0
  49. data/app/controllers/unsakini/posts_controller.rb +61 -0
  50. data/app/controllers/unsakini/share_board_controller.rb +122 -0
  51. data/app/controllers/unsakini/user_token_controller.rb +17 -0
  52. data/app/controllers/unsakini/users_controller.rb +69 -0
  53. data/app/controllers/unsakini/web_controller.rb +27 -0
  54. data/app/mailers/unsakini/user_mailer.rb +13 -0
  55. data/app/models/concerns/unsakini/encryptable_model_concern.rb +97 -0
  56. data/app/models/unsakini/application_record.rb +7 -0
  57. data/app/models/unsakini/board.rb +16 -0
  58. data/app/models/unsakini/comment.rb +12 -0
  59. data/app/models/unsakini/post.rb +15 -0
  60. data/app/models/unsakini/user.rb +43 -0
  61. data/app/models/unsakini/user_board.rb +84 -0
  62. data/app/models/unsakini.rb +5 -0
  63. data/app/serializers/unsakini/board_serializer.rb +7 -0
  64. data/app/serializers/{comment_serializer.rb → unsakini/comment_serializer.rb} +6 -3
  65. data/app/serializers/unsakini/post_serializer.rb +26 -0
  66. data/app/serializers/unsakini/user_board_serializer.rb +14 -0
  67. data/app/serializers/{user_serializer.rb → unsakini/user_serializer.rb} +5 -2
  68. data/app/views/unsakini/user_mailer/confirm_account.html.erb +3 -0
  69. data/app/views/{web_base → unsakini/web}/index.html.erb +9 -7
  70. data/config/routes.rb +10 -10
  71. data/db/migrate/20161116114222_create_unsakini_boards.rb +10 -0
  72. data/db/migrate/{20161116200034_create_user_boards.rb → 20161116200034_create_unsakini_user_boards.rb} +3 -2
  73. data/db/migrate/{20161118031023_create_posts.rb → 20161118031023_create_unsakini_posts.rb} +2 -2
  74. data/db/migrate/{20161118100454_create_comments.rb → 20161118100454_create_unsakini_comments.rb} +2 -2
  75. data/db/migrate/20161126145352_create_unsakini_users.rb +15 -0
  76. data/lib/generators/unsakini/config/config_generator.rb +3 -1
  77. data/lib/generators/unsakini/dependencies/USAGE +5 -0
  78. data/lib/generators/unsakini/dependencies/dependencies_generator.rb +19 -0
  79. data/lib/tasks/unsakini_tasks.rake +6 -37
  80. data/lib/unsakini/engine.rb +2 -0
  81. data/lib/unsakini/version.rb +1 -1
  82. data/public/images/unsakini.svg +56 -0
  83. data/public/unsakini/app/448c34a56d699c29117adc64c43affeb.woff2 +0 -0
  84. data/public/unsakini/app/89889688147bd7575d6327160d64e760.svg +288 -0
  85. data/public/unsakini/app/assets/global.scss +3 -0
  86. data/public/unsakini/app/e18bbf611f2a2e43afc071aa2f4e1512.ttf +0 -0
  87. data/public/unsakini/app/f4769f9bdb7466be65088239c12046d1.eot +0 -0
  88. data/public/unsakini/app/fa2772327f55d8198301fdb8bcfc8158.woff +0 -0
  89. data/{angular/dist → public/unsakini/app}/favicon.ico +0 -0
  90. data/public/unsakini/app/index.html +14 -0
  91. data/public/unsakini/app/inline.d41d8cd98f00b204e980.bundle.js +2 -0
  92. data/public/unsakini/app/inline.d41d8cd98f00b204e980.bundle.map +1 -0
  93. data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.js +2152 -0
  94. data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.js.gz +0 -0
  95. data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.map +1 -0
  96. data/public/unsakini/app/styles.58e065928ed8ebd0b582.bundle.js +2 -0
  97. data/public/unsakini/app/styles.58e065928ed8ebd0b582.bundle.map +1 -0
  98. data/public/unsakini/app/styles.5dac0e986fce6f8738b300cb558b56a0.bundle.css +8 -0
  99. data/spec/concerns/models/encryptable_concern.rb +3 -2
  100. data/spec/controllers/{web_base_controller_spec.rb → web_controller_spec.rb} +4 -3
  101. data/spec/dummy/config/application.rb +3 -1
  102. data/spec/dummy/config/environments/development.rb +2 -0
  103. data/spec/dummy/config/initializers/knock.rb +59 -0
  104. data/spec/dummy/db/schema.rb +16 -14
  105. data/spec/dummy/db/test.sqlite3 +0 -0
  106. data/spec/factories/boards.rb +1 -1
  107. data/spec/factories/comments.rb +1 -1
  108. data/spec/factories/posts.rb +1 -1
  109. data/spec/factories/user_boards.rb +1 -1
  110. data/spec/factories/users.rb +1 -1
  111. data/spec/models/board_spec.rb +2 -2
  112. data/spec/models/comment_spec.rb +2 -2
  113. data/spec/models/post_spec.rb +2 -2
  114. data/spec/models/user_board_spec.rb +19 -19
  115. data/spec/models/user_spec.rb +1 -1
  116. data/spec/requests/{api/boards/api_boards_crud_spec.rb → boards/boards_crud_spec.rb} +26 -26
  117. data/spec/requests/{api/boards/api_boards_pagination_spec.rb → boards/boards_pagination_spec.rb} +7 -7
  118. data/spec/requests/{api/boards/api_private_board_spec.rb → boards/private_board_spec.rb} +26 -26
  119. data/spec/requests/{api/boards/api_shared_board_spec.rb → boards/shared_board_spec.rb} +9 -9
  120. data/spec/requests/{api/boards/api_sharing_board_spec.rb → boards/sharing_board_spec.rb} +13 -13
  121. data/spec/requests/{api/comments/api_comments_pagination_spec.rb → comments/comments_pagination_spec.rb} +3 -3
  122. data/spec/requests/{api/comments/api_comments_private_board_spec.rb → comments/comments_private_board_spec.rb} +20 -20
  123. data/spec/requests/{api/comments/api_comments_shared_board_spec.rb → comments/comments_shared_board_spec.rb} +17 -17
  124. data/spec/requests/{api/posts/api_posts_pagination_spec.rb → posts/posts_pagination_spec.rb} +3 -3
  125. data/spec/requests/{api/posts/api_posts_private_board_spec.rb → posts/posts_private_board_spec.rb} +22 -22
  126. data/spec/requests/{api/posts/api_posts_shared_board_spec.rb → posts/posts_shared_board_spec.rb} +24 -24
  127. data/spec/requests/{api/user/api_user_create_spec.rb → user/user_create_spec.rb} +19 -23
  128. data/spec/requests/{api/user/api_user_search_spec.rb → user/user_search_spec.rb} +9 -9
  129. data/spec/schema/jwt.json +9 -0
  130. data/spec/spec_helper.rb +1 -0
  131. data/spec/support/auth_helper.rb +0 -2
  132. metadata +133 -200
  133. data/angular/dist/index.html +0 -14
  134. data/angular/dist/inline.bundle.js +0 -139
  135. data/angular/dist/inline.map +0 -1
  136. data/angular/dist/main.bundle.js +0 -64689
  137. data/angular/dist/main.map +0 -1
  138. data/angular/dist/styles.bundle.js +0 -364
  139. data/angular/dist/styles.map +0 -1
  140. data/angular/src/styles.css +0 -1
  141. data/app/controllers/api/boards_controller.rb +0 -73
  142. data/app/controllers/api/comments_controller.rb +0 -51
  143. data/app/controllers/api/posts_controller.rb +0 -58
  144. data/app/controllers/api/share_board_controller.rb +0 -118
  145. data/app/controllers/api/users_controller.rb +0 -40
  146. data/app/controllers/concerns/board_owner_controller_concern.rb +0 -38
  147. data/app/controllers/concerns/comment_owner_controller_concern.rb +0 -33
  148. data/app/controllers/concerns/logged_in_controller_concern.rb +0 -21
  149. data/app/controllers/concerns/post_owner_controller_concern.rb +0 -36
  150. data/app/controllers/concerns/serializer_controller_concern.rb +0 -11
  151. data/app/controllers/user_token_controller.rb +0 -2
  152. data/app/controllers/web_base_controller.rb +0 -23
  153. data/app/models/application_record.rb +0 -5
  154. data/app/models/board.rb +0 -14
  155. data/app/models/comment.rb +0 -9
  156. data/app/models/concerns/encryptable_model_concern.rb +0 -96
  157. data/app/models/post.rb +0 -12
  158. data/app/models/user.rb +0 -15
  159. data/app/models/user_board.rb +0 -82
  160. data/app/serializers/board_serializer.rb +0 -5
  161. data/app/serializers/post_serializer.rb +0 -23
  162. data/app/serializers/user_board_serializer.rb +0 -11
  163. data/db/migrate/20161116114222_create_boards.rb +0 -9
  164. data/db/migrate/20161118221508_add_encrypted_password_to_user_board.rb +0 -5
  165. data/db/migrate/20161122211105_create_users.rb +0 -12
  166. data/db/migrate/20161124102633_add_is_shared_to_boards.rb +0 -5
  167. data/lib/generators/unsakini/angular/USAGE +0 -8
  168. data/lib/generators/unsakini/angular/angular_generator.rb +0 -7
  169. data/public/images/logo.svg +0 -619
  170. data/spec/dummy/config/initializers/assets.rb +0 -11
  171. data/spec/dummy/config/initializers/cookies_serializer.rb +0 -5
  172. data/spec/dummy/config/initializers/session_store.rb +0 -3
  173. data/spec/dummy/db/development.sqlite3 +0 -0
  174. data/spec/dummy/db/migrate/20161124210219_create_boards.unsakini_engine.rb +0 -10
  175. data/spec/dummy/db/migrate/20161124210220_create_user_boards.unsakini_engine.rb +0 -12
  176. data/spec/dummy/db/migrate/20161124210221_create_posts.unsakini_engine.rb +0 -13
  177. data/spec/dummy/db/migrate/20161124210222_create_comments.unsakini_engine.rb +0 -12
  178. data/spec/dummy/db/migrate/20161124210223_add_encrypted_password_to_user_board.unsakini_engine.rb +0 -6
  179. data/spec/dummy/db/migrate/20161124210224_create_users.unsakini_engine.rb +0 -13
  180. data/spec/dummy/db/migrate/20161124210225_add_is_shared_to_boards.unsakini_engine.rb +0 -6
  181. data/spec/dummy/public/app/favicon.ico +0 -0
  182. data/spec/dummy/public/app/index.html +0 -14
  183. data/spec/dummy/public/app/inline.bundle.js +0 -139
  184. data/spec/dummy/public/app/inline.map +0 -1
  185. data/spec/dummy/public/app/main.bundle.js +0 -64689
  186. data/spec/dummy/public/app/main.map +0 -1
  187. data/spec/dummy/public/app/styles.bundle.js +0 -364
  188. data/spec/dummy/public/app/styles.map +0 -1
  189. data/spec/dummy/tmp/unsakini-ng2/LICENSE +0 -21
  190. data/spec/dummy/tmp/unsakini-ng2/README.md +0 -1
  191. data/spec/dummy/tmp/unsakini-ng2/angular-cli.json +0 -59
  192. data/spec/dummy/tmp/unsakini-ng2/e2e/app.e2e-spec.ts +0 -14
  193. data/spec/dummy/tmp/unsakini-ng2/e2e/app.po.ts +0 -11
  194. data/spec/dummy/tmp/unsakini-ng2/e2e/signup.e2e-spec.ts +0 -28
  195. data/spec/dummy/tmp/unsakini-ng2/e2e/signup.po.ts +0 -31
  196. data/spec/dummy/tmp/unsakini-ng2/e2e/tsconfig.json +0 -16
  197. data/spec/dummy/tmp/unsakini-ng2/karma.conf.js +0 -45
  198. data/spec/dummy/tmp/unsakini-ng2/package.json +0 -49
  199. data/spec/dummy/tmp/unsakini-ng2/protractor.conf.js +0 -32
  200. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.css +0 -0
  201. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.html +0 -4
  202. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.spec.ts +0 -47
  203. data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.ts +0 -10
  204. data/spec/dummy/tmp/unsakini-ng2/src/app/app.module.ts +0 -29
  205. data/spec/dummy/tmp/unsakini-ng2/src/app/app.routes.module.ts +0 -29
  206. data/spec/dummy/tmp/unsakini-ng2/src/app/index.ts +0 -2
  207. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.css +0 -0
  208. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.html +0 -14
  209. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.spec.ts +0 -157
  210. data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.ts +0 -42
  211. data/spec/dummy/tmp/unsakini-ng2/src/environments/environment.prod.ts +0 -3
  212. data/spec/dummy/tmp/unsakini-ng2/src/environments/environment.ts +0 -8
  213. data/spec/dummy/tmp/unsakini-ng2/src/favicon.ico +0 -0
  214. data/spec/dummy/tmp/unsakini-ng2/src/index.html +0 -14
  215. data/spec/dummy/tmp/unsakini-ng2/src/main.ts +0 -12
  216. data/spec/dummy/tmp/unsakini-ng2/src/polyfills.ts +0 -19
  217. data/spec/dummy/tmp/unsakini-ng2/src/styles.css +0 -1
  218. data/spec/dummy/tmp/unsakini-ng2/src/test.ts +0 -31
  219. data/spec/dummy/tmp/unsakini-ng2/src/tsconfig.json +0 -18
  220. data/spec/dummy/tmp/unsakini-ng2/src/typings.d.ts +0 -2
  221. data/spec/dummy/tmp/unsakini-ng2/tslint.json +0 -114
  222. data/spec/dummy/tmp/unsakini-ng2/typings.json +0 -4
@@ -0,0 +1,43 @@
1
+ # module Unsakini
2
+ module Unsakini
3
+ class User < ApplicationRecord
4
+
5
+ has_secure_password
6
+
7
+ validates_uniqueness_of :email, case_sensitive: false, on: [:create]
8
+ validates_format_of :email, with: /@/
9
+ validates :name, :email, presence: true
10
+ validates :password, :presence => true,
11
+ :confirmation => true,
12
+ :length => { :minimum => 6 },
13
+ :if => :password # only validate if password changed!
14
+
15
+ has_many :user_boards
16
+ has_many :boards, through: :user_boards
17
+
18
+ before_save :downcase_email
19
+ before_create :generate_confirmation_instructions
20
+
21
+ def downcase_email
22
+ self.email = self.email.delete(' ').downcase
23
+ end
24
+
25
+ def generate_confirmation_instructions
26
+ self.confirmation_token = SecureRandom.hex(10)
27
+ self.confirmation_sent_at = Time.now.utc
28
+ end
29
+
30
+ def confirmation_token_valid?
31
+ (self.confirmation_sent_at + 30.days) > Time.now.utc
32
+ end
33
+
34
+ def mark_as_confirmed!
35
+ self.confirmation_token = nil
36
+ self.confirmed_at = Time.now.utc
37
+ save
38
+ end
39
+
40
+ end
41
+ end
42
+
43
+ # end
@@ -0,0 +1,84 @@
1
+ # UserBoard model, links the user and it's boards
2
+ module Unsakini
3
+ class UserBoard < ApplicationRecord
4
+ include EncryptableModelConcern
5
+
6
+ encryptable_attributes :encrypted_password
7
+
8
+ validates :encrypted_password, :presence => true, if: :is_admin
9
+
10
+ before_validation :validate_before_create, on: :create
11
+ before_validation :validate_before_update, on: :update
12
+
13
+ belongs_to :user
14
+ belongs_to :board
15
+
16
+ scope :admin, -> { where(is_admin: true) }
17
+
18
+ def name=(str)
19
+ @name = str
20
+ end
21
+
22
+ def name
23
+ if !@name.nil?
24
+ @name
25
+ else
26
+ self.board.name
27
+ end
28
+ end
29
+
30
+ # Returns user_boards where {Board} is `is_shared`
31
+ #
32
+ # @param is_shared [Boolean] wether to return shared or not shared boards
33
+ def self.shared(is_shared)
34
+ joins("LEFT JOIN #{Board.table_name} ON #{self.table_name}.board_id = #{Board.table_name}.id")
35
+ .where("#{Board.table_name}.is_shared = ?", is_shared)
36
+ end
37
+
38
+ def share(user_ids, new_key)
39
+ ActiveRecord::Base.transaction do
40
+ user_ids.each do |usr_id|
41
+ UserBoard.new({
42
+ user_id: usr_id,
43
+ board_id: self.board_id,
44
+ encrypted_password: nil,
45
+ is_admin: false
46
+ })
47
+ .save!
48
+ end
49
+ self.board.is_shared = true
50
+ self.encrypted_password = new_key
51
+ self.save!
52
+ end
53
+ true
54
+
55
+ rescue
56
+ self.errors[:base] << "Unable to share the this board"
57
+ false
58
+ end
59
+
60
+ private
61
+
62
+ def reset_user_boards_encrypted_password
63
+ UserBoard.where("board_id = ? AND user_id != ?", self.board_id, self.user_id).update_all(encrypted_password: nil)
64
+ end
65
+
66
+ def validate_before_create
67
+ if self.board.nil?
68
+ b = Board.new(name: @name)
69
+ if b.save
70
+ self.board_id = b.id
71
+ else
72
+ self.errors[:base] << "Board name is invalid"
73
+ end
74
+ end
75
+ end
76
+
77
+ def validate_before_update
78
+ self.board.name = @name if !@name.blank?
79
+ reset_user_boards_encrypted_password if self.encrypted_password_changed?
80
+ self.errors[:base] << "Board name is invalid" if !self.board.save
81
+ end
82
+
83
+ end
84
+ end
@@ -0,0 +1,5 @@
1
+ module Unsakini
2
+ def self.table_name_prefix
3
+ 'unsakini_'
4
+ end
5
+ end
@@ -0,0 +1,7 @@
1
+ module Unsakini
2
+ class BoardSerializer < ActiveModel::Serializer
3
+
4
+ attributes :id, :name, :created_at, :updated_at
5
+
6
+ end
7
+ end
@@ -1,10 +1,13 @@
1
1
  # Serializes the {Comment} model instance to json.
2
2
  # Read more about active model serializers - https://github.com/rails-api/active_model_serializers
3
3
 
4
- class CommentSerializer < ActiveModel::Serializer
4
+ module Unsakini
5
+ class CommentSerializer < ActiveModel::Serializer
5
6
 
6
- attributes :id, :content, :created_at, :updated_at
7
+ attributes :id, :content, :created_at, :updated_at
7
8
 
8
- belongs_to :user
9
+ belongs_to :user
10
+
11
+ end
9
12
 
10
13
  end
@@ -0,0 +1,26 @@
1
+ # Serializes the `Post` model instance to json.
2
+ # Read more about active model serializers - https://github.com/rails-api/active_model_serializers
3
+
4
+ module Unsakini
5
+ class PostSerializer < ActiveModel::Serializer
6
+
7
+ attributes :id, :title, :content, :created_at, :updated_at
8
+
9
+ belongs_to :user
10
+
11
+ belongs_to :board do |serializer|
12
+ user_board = object.board.user_boards.where(user_id: object.user_id).first
13
+
14
+ {
15
+ "id" => object.board.id,
16
+ "name" => object.board.name,
17
+ "is_admin" => user_board.is_admin,
18
+ "encrypted_password" => user_board.encrypted_password,
19
+ "created_at" => object.board.created_at,
20
+ "updated_at" => object.board.updated_at
21
+ }
22
+ end
23
+
24
+ end
25
+
26
+ end
@@ -0,0 +1,14 @@
1
+ # Serializes the `UserBoard` model instance to json.
2
+ # Read more about active model serializers - https://github.com/rails-api/active_model_serializers
3
+ #
4
+
5
+ module Unsakini
6
+ class UserBoardSerializer < ActiveModel::Serializer
7
+
8
+ attributes :id, :is_admin, :encrypted_password, :created_at, :updated_at
9
+
10
+ belongs_to :board
11
+
12
+ end
13
+
14
+ end
@@ -1,6 +1,9 @@
1
1
  # Serializes the `User` model instance to json.
2
2
  # Read more about active model serializers - https://github.com/rails-api/active_model_serializers
3
3
  #
4
- class UserSerializer < ActiveModel::Serializer
5
- attributes :id, :name, :email, :created_at, :updated_at
4
+ module Unsakini
5
+ class UserSerializer < ActiveModel::Serializer
6
+ attributes :id, :name, :email, :created_at, :updated_at
7
+ end
8
+
6
9
  end
@@ -0,0 +1,3 @@
1
+ <h1>Confirm Your Account</h1>
2
+ Click the link below: <br>
3
+ <a href="<%= @url %>"><%= @url %></a>
@@ -37,12 +37,15 @@
37
37
  <div id="wrapper">
38
38
  <header id="header">
39
39
  <div class="container">
40
- <div class="logo"><a href="#"><img src="images/logo.svg" alt="FORKIO"></a></div>
40
+ <div class="logo"><a href="#">
41
+ <img src="images/unsakini.svg" width="150px" height="40px" alt="Unsakini">
42
+ <!-- UNSAKINI -->
43
+ </a></div>
41
44
  <nav id="nav">
42
45
  <div class="opener-holder">
43
46
  <a href="#" class="nav-opener"><span></span></a>
44
47
  </div>
45
- <a href="/app/signup" class="btn btn-primary rounded visible-md visible-lg">
48
+ <a href="/unsakini/app/signup" class="btn btn-primary rounded visible-md visible-lg">
46
49
  Create Account
47
50
  </a>
48
51
  <div class="nav-drop">
@@ -51,8 +54,8 @@
51
54
  <li><a href="#">Documentation</a></li>
52
55
  <li><a href="#">Blog</a></li>
53
56
  <li class="hidden-xs hidden-sm">|</li>
54
- <li><a href="/app/login">Login</a></li>
55
- <li><a href="/app/signup" class="hidden-md hidden-lg">Create Account</a></li>
57
+ <li><a href="/unsakini/app/login">Login</a></li>
58
+ <li><a href="/unsakini/app/signup" class="hidden-md hidden-lg">Create Account</a></li>
56
59
  </ul>
57
60
  <!-- <div class="drop-holder visible-sm visible-xs">
58
61
  <span>Follow Us</span>
@@ -88,7 +91,7 @@
88
91
  </div>
89
92
  <div class="row">
90
93
  <div class="text-box col-md-offset-1 col-md-10">
91
- <h2>Revolutionary Bulletin Board</h2>
94
+ <h2>Encrypted Bulletin Board</h2>
92
95
  <p>
93
96
  <strong><a href="https://www.unsakini.com">Unsakini</a></strong> is an open source encrypted bulletin board created with the aim of evading global information surveillance and spying, preventing data leaks and promoting information confidentiality and integrity.
94
97
 
@@ -398,7 +401,7 @@
398
401
  <div class="footer-holder">
399
402
  <div class="row">
400
403
  <div class="col-md-4">
401
- <div class="logo"><a href="#"><img src="images/logo.svg" alt="FORKIO"></a></div>
404
+ <div class="logo"><a href="#"><img src="images/unsakini.svg" alt="FORKIO"></a></div>
402
405
  <p>
403
406
  <%= @tagline %>
404
407
  </p>
@@ -407,7 +410,6 @@
407
410
  <h4>Links</h4>
408
411
  <ul>
409
412
  <li><a href="http://www.unsakini.com">Project Website</a></li>
410
- <li><a href="<%= @repository %>">Contribution</a></li>
411
413
  <li><a href="/">Documentation</a></li>
412
414
  </ul>
413
415
  </div>
data/config/routes.rb CHANGED
@@ -1,14 +1,14 @@
1
1
  Rails.application.routes.draw do
2
-
3
- root to: 'web_base#index'
4
2
 
5
- post 'user_token' => 'user_token#create'
3
+ root to: 'unsakini/web#index'
6
4
 
7
- # ng2 html5 pushState routes
8
- get 'app', to: 'web_base#app'
9
- get 'app/*ngroute', to: 'web_base#app'
5
+ namespace :unsakini do
6
+ #knock route
7
+ post 'user_token' => 'user_token#create'
8
+ # ng2 html5 pushState routes
9
+ get 'app', to: 'web#app'
10
+ get 'app/*ngroute', to: 'web#app'
10
11
 
11
- namespace :api do
12
12
  resource :user
13
13
  resources :boards do
14
14
  resources :posts do
@@ -16,9 +16,9 @@ Rails.application.routes.draw do
16
16
  end
17
17
  end
18
18
 
19
- post '/api/share/board/', to: 'share_board#index', as: 'share_board'
20
- get '/api/users/search', to: 'users#search', as: 'user_search'
21
-
19
+ post 'share/board/', to: 'share_board#index', as: 'share_board'
20
+ get 'users/search', to: 'users#search', as: 'user_search'
21
+ get 'user/confirm/:token', to: 'users#confirm', as: 'confirm_account'
22
22
 
23
23
  end
24
24
 
@@ -0,0 +1,10 @@
1
+ class CreateUnsakiniBoards < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :unsakini_boards do |t|
4
+ t.text :name
5
+ t.boolean :is_shared, default: false
6
+
7
+ t.timestamps
8
+ end
9
+ end
10
+ end
@@ -1,8 +1,9 @@
1
- class CreateUserBoards < ActiveRecord::Migration[5.0]
1
+ class CreateUnsakiniUserBoards < ActiveRecord::Migration[5.0]
2
2
  def change
3
- create_table :user_boards do |t|
3
+ create_table :unsakini_user_boards do |t|
4
4
  t.integer :user_id
5
5
  t.integer :board_id
6
+ t.string :encrypted_password
6
7
  t.boolean :is_admin, :default => false
7
8
 
8
9
  t.timestamps
@@ -1,6 +1,6 @@
1
- class CreatePosts < ActiveRecord::Migration[5.0]
1
+ class CreateUnsakiniPosts < ActiveRecord::Migration[5.0]
2
2
  def change
3
- create_table :posts do |t|
3
+ create_table :unsakini_posts do |t|
4
4
  t.text :title
5
5
  t.text :content
6
6
  t.integer :user_id
@@ -1,6 +1,6 @@
1
- class CreateComments < ActiveRecord::Migration[5.0]
1
+ class CreateUnsakiniComments < ActiveRecord::Migration[5.0]
2
2
  def change
3
- create_table :comments do |t|
3
+ create_table :unsakini_comments do |t|
4
4
  t.text :content
5
5
  t.integer :user_id
6
6
  t.integer :post_id
@@ -0,0 +1,15 @@
1
+ class CreateUnsakiniUsers < ActiveRecord::Migration[5.0]
2
+ def change
3
+ create_table :unsakini_users do |t|
4
+ t.string :name, null: false
5
+ t.string :email, null: false
6
+ t.string :password_digest, null: false
7
+ t.string :confirmation_token
8
+ t.datetime :confirmed_at
9
+ t.datetime :confirmation_sent_at
10
+
11
+ t.timestamps
12
+ end
13
+
14
+ end
15
+ end
@@ -1,7 +1,9 @@
1
1
  class Unsakini::ConfigGenerator < Rails::Generators::Base
2
2
  source_root File.expand_path('../templates', __FILE__)
3
3
 
4
- def copy_initializer_file
4
+ def initialize_config_options
5
5
  copy_file "unsakini.rb", "config/initializers/unsakini.rb"
6
+ environment 'config.action_mailer.delivery_method = :letter_opener', env: 'development'
7
+ environment 'config.action_mailer.default_url_options = { :host => "localhost:3000" }', env: 'development'
6
8
  end
7
9
  end
@@ -0,0 +1,5 @@
1
+ Description:
2
+ Add the needed dependencies to Gemfile. Review your Gemfile after running this command and before you do bundle install.
3
+
4
+ Example:
5
+ rails generate dependencies
@@ -0,0 +1,19 @@
1
+ class Unsakini::DependenciesGenerator < Rails::Generators::Base
2
+ source_root File.expand_path('../templates', __FILE__)
3
+
4
+ def add_dependencies_to_host
5
+
6
+ gem 'active_model_serializers'
7
+ gem 'rack-cors'
8
+ gem 'kaminari'
9
+ gem 'api-pagination'
10
+ gem 'knock', git: 'https://github.com/adonespitogo/knock'
11
+
12
+ gem_group :development, :test do
13
+ gem "rb-readline"
14
+ gem "byebug"
15
+ gem 'letter_opener'
16
+ end
17
+
18
+ end
19
+ end
@@ -1,56 +1,25 @@
1
1
  namespace :unsakini do
2
2
 
3
-
4
- desc "Runs `rails generate unsakini:config`"
5
- task :config do
6
- begin
7
- Dir.chdir Rails.root do
8
- system('bin/rails g unsakini:config')
9
- end
10
- rescue Exception => e
11
- puts "
12
-
13
- Please run `bin/rails g unsakini:config` before you proceed.
14
-
15
- "
16
- end
17
- end
18
-
19
- desc "Installs the Angular 2 web client to public/app"
20
- task :ng2 do
21
- begin
22
- Dir.chdir Rails.root do
23
- system("bin/rails g unsakini:angular")
24
- end
25
- rescue Exception => e
26
- puts e.to_s
27
- raise "
28
-
29
- Please clone #{repo_name} and extract angular/dist folder to your projects public/app folder
30
-
31
- "
32
- end
33
- end
34
-
35
3
  desc "One stop command to install unsakini."
36
- task :install => [:config, :ng2] do
4
+ task :install do
37
5
  begin
38
6
  Dir.chdir "#{Rails.root}" do
7
+ system("#{Rails.root}/bin/rails g unsakini:config")
39
8
  system("#{Rails.root}/bin/rake unsakini_engine:install:migrations")
40
9
  system("#{Rails.root}/bin/rake db:migrate")
10
+ system("#{Rails.root}/bin/rails g unsakini:dependencies")
41
11
  end
42
12
  rescue Exception => e
43
13
  puts e.to_s
44
14
  puts \
45
15
  "
46
-
47
16
  An error occured. Please run the following commands in succession:
48
17
 
49
18
  "
50
19
  puts "1.) rails g unsakini:config"
51
- puts "2.) rails g unsakini:angular"
52
- puts "3.) bundle exec rake unsakini_engine:install:migrations"
53
- puts "4.) bundle exec rake db:migrate"
20
+ puts "2.) bundle exec rake unsakini_engine:install:migrations"
21
+ puts "3.) bundle exec rake db:migrate"
22
+ puts "4.) rails g unsakini:dependencies"
54
23
  puts ""
55
24
  end
56
25
  end
@@ -1,3 +1,5 @@
1
+ require "unsakini/version"
2
+
1
3
  module Unsakini
2
4
  class Engine < ::Rails::Engine
3
5
 
@@ -1,3 +1,3 @@
1
1
  module Unsakini
2
- VERSION = '0.0.4.2'
2
+ VERSION = '0.0.4.3'
3
3
  end
@@ -0,0 +1,56 @@
1
+ <?xml version="1.0" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
3
+ "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
4
+ <!-- /*width="912.000000pt" height="179.000000pt"**/ -->
5
+ <svg version="1.0" xmlns="http://www.w3.org/2000/svg"
6
+ viewBox="0 0 912.000000 179.000000"
7
+ preserveAspectRatio="xMidYMid meet">
8
+ <metadata>
9
+ Created by potrace 1.13, written by Peter Selinger 2001-2015
10
+ </metadata>
11
+ <g transform="translate(0.000000,179.000000) scale(0.100000,-0.100000)"
12
+ fill="#000000" stroke="none">
13
+ <path d="M6824 1723 c-25 -5 -98 -70 -109 -98 -35 -88 -21 -163 44 -224 46
14
+ -43 74 -53 136 -50 144 8 224 150 159 280 -38 75 -132 113 -230 92z"/>
15
+ <path d="M8834 1723 c-25 -5 -98 -70 -109 -98 -35 -88 -21 -163 44 -224 46
16
+ -43 74 -53 136 -50 144 8 224 150 159 280 -38 75 -132 113 -230 92z"/>
17
+ <path d="M5440 900 l0 -800 160 0 160 0 0 167 0 167 56 54 57 53 146 -220 146
18
+ -220 192 -1 191 0 -11 25 c-7 14 -15 25 -19 25 -5 0 -8 7 -8 15 0 8 -4 15 -10
19
+ 15 -5 0 -10 7 -10 15 0 8 -4 15 -10 15 -5 0 -10 7 -10 15 0 8 -4 15 -10 15 -5
20
+ 0 -10 7 -10 15 0 8 -4 15 -10 15 -5 0 -10 7 -10 15 0 8 -4 15 -10 15 -5 0 -10
21
+ 7 -10 15 0 8 -4 15 -10 15 -5 0 -10 7 -10 15 0 8 -4 15 -10 15 -5 0 -10 7 -10
22
+ 15 0 8 -4 15 -10 15 -5 0 -10 5 -10 10 0 6 -58 97 -128 203 l-129 192 31 30
23
+ c17 17 83 86 146 154 63 68 147 158 187 199 40 41 70 79 67 84 -3 4 -95 8
24
+ -204 8 -193 0 -199 -1 -214 -22 -29 -42 -331 -358 -342 -358 -2 0 -4 182 -4
25
+ 405 l0 405 -160 0 -160 0 0 -800z"/>
26
+ <path d="M60 1138 c0 -275 4 -489 11 -528 50 -312 272 -509 594 -527 276 -15
27
+ 507 107 613 327 69 141 72 174 72 715 l0 475 -164 0 -165 0 -3 -467 c-4 -452
28
+ -5 -470 -26 -533 -60 -177 -208 -256 -382 -204 -71 21 -148 97 -181 179 l-24
29
+ 60 -3 483 -3 482 -169 0 -170 0 0 -462z"/>
30
+ <path d="M2202 1264 c-66 -17 -104 -36 -169 -85 l-53 -40 0 61 0 60 -165 0
31
+ -165 0 0 -580 0 -580 165 0 164 0 3 378 3 379 30 49 c79 126 271 156 347 53
32
+ 50 -67 51 -80 56 -481 l4 -378 159 0 159 0 0 383 c0 415 -6 470 -55 567 -89
33
+ 175 -293 266 -483 214z"/>
34
+ <path d="M3333 1266 c-131 -30 -244 -114 -292 -216 -35 -75 -36 -192 -2 -263
35
+ 42 -86 147 -154 338 -221 122 -42 159 -60 196 -94 36 -34 37 -80 1 -113 -22
36
+ -21 -37 -24 -110 -28 -119 -5 -246 37 -366 121 -9 7 -19 10 -21 8 -27 -30
37
+ -135 -195 -131 -201 14 -23 161 -102 239 -128 194 -64 337 -67 490 -10 80 30
38
+ 184 131 209 204 39 116 29 229 -27 312 -42 62 -126 107 -325 174 -84 29 -165
39
+ 61 -178 72 -58 45 -51 104 15 131 82 32 207 14 324 -46 34 -18 65 -34 68 -36
40
+ 7 -3 119 192 119 208 0 15 -119 77 -205 105 -99 34 -247 42 -342 21z"/>
41
+ <path d="M4525 1270 c-119 -19 -285 -84 -355 -139 l-25 -20 69 -100 c38 -56
42
+ 70 -101 70 -101 1 0 37 18 80 40 230 115 436 82 453 -73 l5 -45 -198 -4 c-166
43
+ -4 -210 -9 -264 -26 -137 -45 -223 -121 -251 -225 -19 -71 -8 -203 23 -269 69
44
+ -148 245 -240 431 -225 86 7 161 41 227 103 l50 47 0 -67 0 -66 155 0 155 0 0
45
+ 358 c0 394 -9 511 -44 587 -45 98 -131 170 -249 207 -73 23 -241 32 -332 18z
46
+ m295 -718 c0 -65 -34 -129 -88 -167 -41 -28 -50 -30 -135 -30 -80 0 -96 3
47
+ -124 23 -60 42 -68 130 -17 177 37 34 83 43 232 44 l132 1 0 -48z"/>
48
+ <path d="M7887 1261 c-70 -19 -119 -47 -172 -97 l-30 -28 -3 62 -3 62 -159 0
49
+ -160 0 0 -580 0 -580 160 0 160 0 1 338 c2 320 3 367 11 402 7 31 50 106 71
50
+ 123 90 73 230 76 293 5 55 -62 56 -69 55 -484 l-2 -384 171 0 170 0 0 353 c0
51
+ 194 -5 381 -11 417 -17 111 -19 121 -28 138 -5 9 -17 34 -27 55 -17 34 -89
52
+ 115 -126 142 -21 15 -100 52 -133 62 -54 16 -167 13 -238 -6z"/>
53
+ <path d="M6730 680 l0 -580 160 0 160 0 0 580 0 580 -160 0 -160 0 0 -580z"/>
54
+ <path d="M8740 680 l0 -580 160 0 160 0 0 580 0 580 -160 0 -160 0 0 -580z"/>
55
+ </g>
56
+ </svg>