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.
- 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
|