unsakini 0.0.4.2 → 0.0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +26 -0
- data/angular/angular-cli.json +5 -3
- data/angular/npm-debug.log +54 -0
- data/angular/package.json +4 -1
- data/angular/src/app/app.component.html +1 -4
- data/angular/src/app/app.module.ts +8 -7
- data/angular/src/app/app.routes.module.ts +12 -2
- data/angular/src/app/confirm-account/confirm-account.component.ts +27 -0
- data/angular/src/app/confirm-account/confirm-account.html +41 -0
- data/angular/src/app/confirm-account/confirm-account.module.ts +24 -0
- data/angular/src/app/confirm-account/confirm-account.scss +3 -0
- data/angular/src/app/confirm-account/confirm-account.service.ts +27 -0
- data/angular/src/app/confirm-account/index.ts +3 -0
- data/angular/src/app/index.ts +2 -0
- data/angular/src/app/login/index.ts +3 -0
- data/angular/src/app/login/login.component.ts +40 -0
- data/angular/src/app/login/login.html +43 -0
- data/angular/src/app/login/login.module.ts +27 -0
- data/angular/src/app/login/login.service.ts +48 -0
- data/angular/src/app/registration/index.ts +3 -0
- data/angular/src/app/registration/registration.component.html +70 -12
- data/angular/src/app/registration/registration.component.spec.ts +8 -11
- data/angular/src/app/registration/registration.component.ts +10 -8
- data/angular/src/app/registration/registration.module.ts +23 -0
- data/angular/src/app/registration/registration.service.ts +46 -0
- data/angular/src/app/registration/registration.services.spec.ts +71 -0
- data/angular/src/app/services/auth-http/auth.http.service.ts +35 -0
- data/angular/src/app/services/auth-http/index.ts +1 -0
- data/angular/src/app/services/http/http.service.spec.ts +205 -0
- data/angular/src/app/services/http/http.service.ts +40 -0
- data/angular/src/app/services/http/index.ts +1 -0
- data/angular/src/app/services/index.ts +3 -0
- data/angular/src/app/services/services.module.ts +33 -0
- data/angular/src/assets/global.scss +3 -0
- data/angular/src/environments/custom.ts +4 -0
- data/angular/src/environments/environment.prod.ts +2 -1
- data/angular/src/environments/environment.ts +2 -1
- data/angular/src/index.html +1 -1
- data/app/controllers/application_controller.rb +2 -2
- data/app/controllers/concerns/unsakini/board_owner_controller_concern.rb +42 -0
- data/app/controllers/concerns/unsakini/comment_owner_controller_concern.rb +36 -0
- data/app/controllers/concerns/unsakini/logged_in_controller_concern.rb +23 -0
- data/app/controllers/concerns/unsakini/post_owner_controller_concern.rb +38 -0
- data/app/controllers/concerns/unsakini/serializer_controller_concern.rb +13 -0
- data/app/controllers/unsakini/base_controller.rb +6 -0
- data/app/controllers/unsakini/boards_controller.rb +76 -0
- data/app/controllers/unsakini/comments_controller.rb +54 -0
- data/app/controllers/unsakini/posts_controller.rb +61 -0
- data/app/controllers/unsakini/share_board_controller.rb +122 -0
- data/app/controllers/unsakini/user_token_controller.rb +17 -0
- data/app/controllers/unsakini/users_controller.rb +69 -0
- data/app/controllers/unsakini/web_controller.rb +27 -0
- data/app/mailers/unsakini/user_mailer.rb +13 -0
- data/app/models/concerns/unsakini/encryptable_model_concern.rb +97 -0
- data/app/models/unsakini/application_record.rb +7 -0
- data/app/models/unsakini/board.rb +16 -0
- data/app/models/unsakini/comment.rb +12 -0
- data/app/models/unsakini/post.rb +15 -0
- data/app/models/unsakini/user.rb +43 -0
- data/app/models/unsakini/user_board.rb +84 -0
- data/app/models/unsakini.rb +5 -0
- data/app/serializers/unsakini/board_serializer.rb +7 -0
- data/app/serializers/{comment_serializer.rb → unsakini/comment_serializer.rb} +6 -3
- data/app/serializers/unsakini/post_serializer.rb +26 -0
- data/app/serializers/unsakini/user_board_serializer.rb +14 -0
- data/app/serializers/{user_serializer.rb → unsakini/user_serializer.rb} +5 -2
- data/app/views/unsakini/user_mailer/confirm_account.html.erb +3 -0
- data/app/views/{web_base → unsakini/web}/index.html.erb +9 -7
- data/config/routes.rb +10 -10
- data/db/migrate/20161116114222_create_unsakini_boards.rb +10 -0
- data/db/migrate/{20161116200034_create_user_boards.rb → 20161116200034_create_unsakini_user_boards.rb} +3 -2
- data/db/migrate/{20161118031023_create_posts.rb → 20161118031023_create_unsakini_posts.rb} +2 -2
- data/db/migrate/{20161118100454_create_comments.rb → 20161118100454_create_unsakini_comments.rb} +2 -2
- data/db/migrate/20161126145352_create_unsakini_users.rb +15 -0
- data/lib/generators/unsakini/config/config_generator.rb +3 -1
- data/lib/generators/unsakini/dependencies/USAGE +5 -0
- data/lib/generators/unsakini/dependencies/dependencies_generator.rb +19 -0
- data/lib/tasks/unsakini_tasks.rake +6 -37
- data/lib/unsakini/engine.rb +2 -0
- data/lib/unsakini/version.rb +1 -1
- data/public/images/unsakini.svg +56 -0
- data/public/unsakini/app/448c34a56d699c29117adc64c43affeb.woff2 +0 -0
- data/public/unsakini/app/89889688147bd7575d6327160d64e760.svg +288 -0
- data/public/unsakini/app/assets/global.scss +3 -0
- data/public/unsakini/app/e18bbf611f2a2e43afc071aa2f4e1512.ttf +0 -0
- data/public/unsakini/app/f4769f9bdb7466be65088239c12046d1.eot +0 -0
- data/public/unsakini/app/fa2772327f55d8198301fdb8bcfc8158.woff +0 -0
- data/{angular/dist → public/unsakini/app}/favicon.ico +0 -0
- data/public/unsakini/app/index.html +14 -0
- data/public/unsakini/app/inline.d41d8cd98f00b204e980.bundle.js +2 -0
- data/public/unsakini/app/inline.d41d8cd98f00b204e980.bundle.map +1 -0
- data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.js +2152 -0
- data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.js.gz +0 -0
- data/public/unsakini/app/main.54f49c65d3d20650a5d5.bundle.map +1 -0
- data/public/unsakini/app/styles.58e065928ed8ebd0b582.bundle.js +2 -0
- data/public/unsakini/app/styles.58e065928ed8ebd0b582.bundle.map +1 -0
- data/public/unsakini/app/styles.5dac0e986fce6f8738b300cb558b56a0.bundle.css +8 -0
- data/spec/concerns/models/encryptable_concern.rb +3 -2
- data/spec/controllers/{web_base_controller_spec.rb → web_controller_spec.rb} +4 -3
- data/spec/dummy/config/application.rb +3 -1
- data/spec/dummy/config/environments/development.rb +2 -0
- data/spec/dummy/config/initializers/knock.rb +59 -0
- data/spec/dummy/db/schema.rb +16 -14
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/factories/boards.rb +1 -1
- data/spec/factories/comments.rb +1 -1
- data/spec/factories/posts.rb +1 -1
- data/spec/factories/user_boards.rb +1 -1
- data/spec/factories/users.rb +1 -1
- data/spec/models/board_spec.rb +2 -2
- data/spec/models/comment_spec.rb +2 -2
- data/spec/models/post_spec.rb +2 -2
- data/spec/models/user_board_spec.rb +19 -19
- data/spec/models/user_spec.rb +1 -1
- data/spec/requests/{api/boards/api_boards_crud_spec.rb → boards/boards_crud_spec.rb} +26 -26
- data/spec/requests/{api/boards/api_boards_pagination_spec.rb → boards/boards_pagination_spec.rb} +7 -7
- data/spec/requests/{api/boards/api_private_board_spec.rb → boards/private_board_spec.rb} +26 -26
- data/spec/requests/{api/boards/api_shared_board_spec.rb → boards/shared_board_spec.rb} +9 -9
- data/spec/requests/{api/boards/api_sharing_board_spec.rb → boards/sharing_board_spec.rb} +13 -13
- data/spec/requests/{api/comments/api_comments_pagination_spec.rb → comments/comments_pagination_spec.rb} +3 -3
- data/spec/requests/{api/comments/api_comments_private_board_spec.rb → comments/comments_private_board_spec.rb} +20 -20
- data/spec/requests/{api/comments/api_comments_shared_board_spec.rb → comments/comments_shared_board_spec.rb} +17 -17
- data/spec/requests/{api/posts/api_posts_pagination_spec.rb → posts/posts_pagination_spec.rb} +3 -3
- data/spec/requests/{api/posts/api_posts_private_board_spec.rb → posts/posts_private_board_spec.rb} +22 -22
- data/spec/requests/{api/posts/api_posts_shared_board_spec.rb → posts/posts_shared_board_spec.rb} +24 -24
- data/spec/requests/{api/user/api_user_create_spec.rb → user/user_create_spec.rb} +19 -23
- data/spec/requests/{api/user/api_user_search_spec.rb → user/user_search_spec.rb} +9 -9
- data/spec/schema/jwt.json +9 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/support/auth_helper.rb +0 -2
- metadata +133 -200
- data/angular/dist/index.html +0 -14
- data/angular/dist/inline.bundle.js +0 -139
- data/angular/dist/inline.map +0 -1
- data/angular/dist/main.bundle.js +0 -64689
- data/angular/dist/main.map +0 -1
- data/angular/dist/styles.bundle.js +0 -364
- data/angular/dist/styles.map +0 -1
- data/angular/src/styles.css +0 -1
- data/app/controllers/api/boards_controller.rb +0 -73
- data/app/controllers/api/comments_controller.rb +0 -51
- data/app/controllers/api/posts_controller.rb +0 -58
- data/app/controllers/api/share_board_controller.rb +0 -118
- data/app/controllers/api/users_controller.rb +0 -40
- data/app/controllers/concerns/board_owner_controller_concern.rb +0 -38
- data/app/controllers/concerns/comment_owner_controller_concern.rb +0 -33
- data/app/controllers/concerns/logged_in_controller_concern.rb +0 -21
- data/app/controllers/concerns/post_owner_controller_concern.rb +0 -36
- data/app/controllers/concerns/serializer_controller_concern.rb +0 -11
- data/app/controllers/user_token_controller.rb +0 -2
- data/app/controllers/web_base_controller.rb +0 -23
- data/app/models/application_record.rb +0 -5
- data/app/models/board.rb +0 -14
- data/app/models/comment.rb +0 -9
- data/app/models/concerns/encryptable_model_concern.rb +0 -96
- data/app/models/post.rb +0 -12
- data/app/models/user.rb +0 -15
- data/app/models/user_board.rb +0 -82
- data/app/serializers/board_serializer.rb +0 -5
- data/app/serializers/post_serializer.rb +0 -23
- data/app/serializers/user_board_serializer.rb +0 -11
- data/db/migrate/20161116114222_create_boards.rb +0 -9
- data/db/migrate/20161118221508_add_encrypted_password_to_user_board.rb +0 -5
- data/db/migrate/20161122211105_create_users.rb +0 -12
- data/db/migrate/20161124102633_add_is_shared_to_boards.rb +0 -5
- data/lib/generators/unsakini/angular/USAGE +0 -8
- data/lib/generators/unsakini/angular/angular_generator.rb +0 -7
- data/public/images/logo.svg +0 -619
- data/spec/dummy/config/initializers/assets.rb +0 -11
- data/spec/dummy/config/initializers/cookies_serializer.rb +0 -5
- data/spec/dummy/config/initializers/session_store.rb +0 -3
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20161124210219_create_boards.unsakini_engine.rb +0 -10
- data/spec/dummy/db/migrate/20161124210220_create_user_boards.unsakini_engine.rb +0 -12
- data/spec/dummy/db/migrate/20161124210221_create_posts.unsakini_engine.rb +0 -13
- data/spec/dummy/db/migrate/20161124210222_create_comments.unsakini_engine.rb +0 -12
- data/spec/dummy/db/migrate/20161124210223_add_encrypted_password_to_user_board.unsakini_engine.rb +0 -6
- data/spec/dummy/db/migrate/20161124210224_create_users.unsakini_engine.rb +0 -13
- data/spec/dummy/db/migrate/20161124210225_add_is_shared_to_boards.unsakini_engine.rb +0 -6
- data/spec/dummy/public/app/favicon.ico +0 -0
- data/spec/dummy/public/app/index.html +0 -14
- data/spec/dummy/public/app/inline.bundle.js +0 -139
- data/spec/dummy/public/app/inline.map +0 -1
- data/spec/dummy/public/app/main.bundle.js +0 -64689
- data/spec/dummy/public/app/main.map +0 -1
- data/spec/dummy/public/app/styles.bundle.js +0 -364
- data/spec/dummy/public/app/styles.map +0 -1
- data/spec/dummy/tmp/unsakini-ng2/LICENSE +0 -21
- data/spec/dummy/tmp/unsakini-ng2/README.md +0 -1
- data/spec/dummy/tmp/unsakini-ng2/angular-cli.json +0 -59
- data/spec/dummy/tmp/unsakini-ng2/e2e/app.e2e-spec.ts +0 -14
- data/spec/dummy/tmp/unsakini-ng2/e2e/app.po.ts +0 -11
- data/spec/dummy/tmp/unsakini-ng2/e2e/signup.e2e-spec.ts +0 -28
- data/spec/dummy/tmp/unsakini-ng2/e2e/signup.po.ts +0 -31
- data/spec/dummy/tmp/unsakini-ng2/e2e/tsconfig.json +0 -16
- data/spec/dummy/tmp/unsakini-ng2/karma.conf.js +0 -45
- data/spec/dummy/tmp/unsakini-ng2/package.json +0 -49
- data/spec/dummy/tmp/unsakini-ng2/protractor.conf.js +0 -32
- data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.css +0 -0
- data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.html +0 -4
- data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.spec.ts +0 -47
- data/spec/dummy/tmp/unsakini-ng2/src/app/app.component.ts +0 -10
- data/spec/dummy/tmp/unsakini-ng2/src/app/app.module.ts +0 -29
- data/spec/dummy/tmp/unsakini-ng2/src/app/app.routes.module.ts +0 -29
- data/spec/dummy/tmp/unsakini-ng2/src/app/index.ts +0 -2
- data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.css +0 -0
- data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.html +0 -14
- data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.spec.ts +0 -157
- data/spec/dummy/tmp/unsakini-ng2/src/app/registration/registration.component.ts +0 -42
- data/spec/dummy/tmp/unsakini-ng2/src/environments/environment.prod.ts +0 -3
- data/spec/dummy/tmp/unsakini-ng2/src/environments/environment.ts +0 -8
- data/spec/dummy/tmp/unsakini-ng2/src/favicon.ico +0 -0
- data/spec/dummy/tmp/unsakini-ng2/src/index.html +0 -14
- data/spec/dummy/tmp/unsakini-ng2/src/main.ts +0 -12
- data/spec/dummy/tmp/unsakini-ng2/src/polyfills.ts +0 -19
- data/spec/dummy/tmp/unsakini-ng2/src/styles.css +0 -1
- data/spec/dummy/tmp/unsakini-ng2/src/test.ts +0 -31
- data/spec/dummy/tmp/unsakini-ng2/src/tsconfig.json +0 -18
- data/spec/dummy/tmp/unsakini-ng2/src/typings.d.ts +0 -2
- data/spec/dummy/tmp/unsakini-ng2/tslint.json +0 -114
- 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
|
|
@@ -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
|
-
|
|
4
|
+
module Unsakini
|
|
5
|
+
class CommentSerializer < ActiveModel::Serializer
|
|
5
6
|
|
|
6
|
-
|
|
7
|
+
attributes :id, :content, :created_at, :updated_at
|
|
7
8
|
|
|
8
|
-
|
|
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
|
-
|
|
5
|
-
|
|
4
|
+
module Unsakini
|
|
5
|
+
class UserSerializer < ActiveModel::Serializer
|
|
6
|
+
attributes :id, :name, :email, :created_at, :updated_at
|
|
7
|
+
end
|
|
8
|
+
|
|
6
9
|
end
|
|
@@ -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="#"
|
|
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>
|
|
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/
|
|
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
|
-
|
|
3
|
+
root to: 'unsakini/web#index'
|
|
6
4
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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 '
|
|
20
|
-
get '
|
|
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
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
class
|
|
1
|
+
class CreateUnsakiniUserBoards < ActiveRecord::Migration[5.0]
|
|
2
2
|
def change
|
|
3
|
-
create_table :
|
|
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
|
|
@@ -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
|
|
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,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
|
|
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.)
|
|
52
|
-
puts "3.) bundle exec rake
|
|
53
|
-
puts "4.)
|
|
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
|
data/lib/unsakini/engine.rb
CHANGED
data/lib/unsakini/version.rb
CHANGED
|
@@ -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>
|
|
Binary file
|