digital_heroes_startkit 0.1.1
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 +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +37 -0
- data/Rakefile +36 -0
- data/app/assets/config/digital_heroes_startkit_manifest.js +0 -0
- data/app/assets/javascripts/authorization.coffee +79 -0
- data/app/assets/javascripts/avatar.coffee +16 -0
- data/app/assets/javascripts/datepicker.js +2 -0
- data/app/assets/javascripts/digital_heroes_startkit/cable.js +13 -0
- data/app/assets/javascripts/digital_heroes_startkit/channels/pills.coffee +23 -0
- data/app/assets/javascripts/digital_heroes_startkit/input.coffee +5 -0
- data/app/assets/javascripts/digital_heroes_startkit/pills.coffee +2 -0
- data/app/assets/javascripts/digital_heroes_startkit/snap.svg-min.js +21 -0
- data/app/assets/javascripts/digital_heroes_startkit.js +26 -0
- data/app/assets/javascripts/profile.coffee +53 -0
- data/app/assets/javascripts/profile_geodata.coffee +68 -0
- data/app/assets/javascripts/reg_fields_checkup.coffee +96 -0
- data/app/assets/javascripts/registration.coffee +35 -0
- data/app/assets/javascripts/resurrection.coffee +20 -0
- data/app/channels/application_cable/channel.rb +4 -0
- data/app/channels/application_cable/connection.rb +4 -0
- data/app/channels/pills_channel.rb +10 -0
- data/app/controllers/avatars_controller.rb +11 -0
- data/app/controllers/clients_controller.rb +62 -0
- data/app/controllers/email_access_cards_controller.rb +28 -0
- data/app/controllers/geodata_controller.rb +84 -0
- data/app/controllers/nickname_access_cards_controller.rb +30 -0
- data/app/controllers/oauth_controller.rb +178 -0
- data/app/controllers/openid_controller.rb +124 -0
- data/app/controllers/phone_access_cards_controller.rb +28 -0
- data/app/controllers/profile_controller.rb +114 -0
- data/app/controllers/response_controller.rb +17 -0
- data/app/controllers/start_kit_controller.rb +86 -0
- data/app/controllers/user_cards_controller.rb +305 -0
- data/app/jobs/log_analyzer_job.rb +50 -0
- data/app/jobs/password_resurrection_kill_job.rb +9 -0
- data/app/mailers/admin_mailer.rb +9 -0
- data/app/mailers/client_mailer.rb +3 -0
- data/app/mailers/kreator_mailer.rb +9 -0
- data/app/mailers/manager_mailer.rb +9 -0
- data/app/mailers/prometeus_mailer.rb +16 -0
- data/app/mailers/user_cards_mailer.rb +9 -0
- data/app/models/admin.rb +3 -0
- data/app/models/avatar.rb +23 -0
- data/app/models/city.rb +7 -0
- data/app/models/client.rb +31 -0
- data/app/models/country.rb +7 -0
- data/app/models/delayed_job.rb +20 -0
- data/app/models/email_access_card.rb +30 -0
- data/app/models/kreator.rb +3 -0
- data/app/models/log_error.rb +56 -0
- data/app/models/log_error_type.rb +3 -0
- data/app/models/manager.rb +3 -0
- data/app/models/nickname_access_card.rb +18 -0
- data/app/models/oauth_access_card.rb +38 -0
- data/app/models/phone_access_card.rb +19 -0
- data/app/models/prometeus.rb +50 -0
- data/app/models/user_card.rb +158 -0
- data/app/views/admin_mailer/greetings_email.html.erb +191 -0
- data/app/views/client_mailer/greetings_email.html.erb +191 -0
- data/app/views/kreator_mailer/greetings_email.html.erb +191 -0
- data/app/views/manager_mailer/greetings_email.html.erb +191 -0
- data/app/views/oauth/verify.slim +1 -0
- data/app/views/profile/_add_avatar.slim +12 -0
- data/app/views/profile/_user_profile.slim +95 -0
- data/app/views/profile/index.slim +12 -0
- data/app/views/user_cards/authorization.slim +72 -0
- data/app/views/user_cards/confirmation_but_access_code.slim +7 -0
- data/app/views/user_cards/confirmation_complete.slim +7 -0
- data/app/views/user_cards/registration.slim +86 -0
- data/app/views/user_cards/resurrection.slim +19 -0
- data/app/views/user_cards/resurrection_but_access_code.slim +7 -0
- data/app/views/user_cards/resurrection_no_access_code.slim +7 -0
- data/app/views/user_cards_mailer/email.html.erb +191 -0
- data/app/views/user_cards_mailer/resurrection.html.erb +191 -0
- data/config/initializers/session_manager.rb +2 -0
- data/config/routes.rb +53 -0
- data/lib/access_control.rb +3 -0
- data/lib/digital_heroes_startkit/engine.rb +25 -0
- data/lib/digital_heroes_startkit/version.rb +3 -0
- data/lib/digital_heroes_startkit.rb +5 -0
- data/lib/generators/digital_heroes_startkit/install_generator.rb +61 -0
- data/lib/generators/project/Capfile +36 -0
- data/lib/generators/project/Procfile +3 -0
- data/lib/generators/project/app/assets/stylesheets/application.scss +16 -0
- data/lib/generators/project/app/assets/stylesheets/base/_auth.scss +37 -0
- data/lib/generators/project/app/assets/stylesheets/base/_buttons.scss +62 -0
- data/lib/generators/project/app/assets/stylesheets/base/_checkbox.scss +71 -0
- data/lib/generators/project/app/assets/stylesheets/base/_datepicker.scss +620 -0
- data/lib/generators/project/app/assets/stylesheets/base/_form.scss +81 -0
- data/lib/generators/project/app/assets/stylesheets/base/_notice.scss +14 -0
- data/lib/generators/project/app/assets/stylesheets/base/_pills.scss +39 -0
- data/lib/generators/project/app/assets/stylesheets/base/_profile.scss +67 -0
- data/lib/generators/project/app/assets/stylesheets/base/_reset.scss +49 -0
- data/lib/generators/project/app/assets/stylesheets/base/_social.scss +52 -0
- data/lib/generators/project/app/assets/stylesheets/base/_user.scss +0 -0
- data/lib/generators/project/app/assets/stylesheets/base/_user_avatar.scss +18 -0
- data/lib/generators/project/app/assets/stylesheets/base/styles.scss.txt +35 -0
- data/lib/generators/project/app/assets/stylesheets/plugins/sumoselect.scss +296 -0
- data/lib/generators/project/app/controllers/application_controller.rb +3 -0
- data/lib/generators/project/app/views/layouts/_counts.html.erb +29 -0
- data/lib/generators/project/app/views/layouts/_footer.slim +6 -0
- data/lib/generators/project/app/views/layouts/_head.slim +7 -0
- data/lib/generators/project/app/views/layouts/_header.slim +47 -0
- data/lib/generators/project/app/views/layouts/_mobile_menu.slim +11 -0
- data/lib/generators/project/app/views/layouts/application.slim +26 -0
- data/lib/generators/project/app/views/layouts/mailer.html.erb +13 -0
- data/lib/generators/project/app/views/layouts/mailer.text.erb +1 -0
- data/lib/generators/project/config/application.access.yml +66 -0
- data/lib/generators/project/config/application.db.yml +5 -0
- data/lib/generators/project/config/application.google.yml +3 -0
- data/lib/generators/project/config/application.oauth.yml +135 -0
- data/lib/generators/project/config/application.robokassa.yml +10 -0
- data/lib/generators/project/config/application.sendgrid.yml +3 -0
- data/lib/generators/project/config/application.telegram.yml +22 -0
- data/lib/generators/project/config/application.yml +28 -0
- data/lib/generators/project/config/cable.yml +6 -0
- data/lib/generators/project/config/capistrano.yml +78 -0
- data/lib/generators/project/config/database.yml +52 -0
- data/lib/generators/project/config/deploy/application.secrets.yml +4 -0
- data/lib/generators/project/config/deploy/domain.crt +92 -0
- data/lib/generators/project/config/deploy/domain.key +51 -0
- data/lib/generators/project/config/deploy/nginx.conf +50 -0
- data/lib/generators/project/config/deploy/production.rb +67 -0
- data/lib/generators/project/config/deploy/secrets.yml +32 -0
- data/lib/generators/project/config/deploy/secrets.yml.enc +1 -0
- data/lib/generators/project/config/deploy/secrets.yml.key +1 -0
- data/lib/generators/project/config/deploy/staging.rb +61 -0
- data/lib/generators/project/config/deploy/virgin_conf/database.yml +42 -0
- data/lib/generators/project/config/deploy/virgin_conf/nginx_site.conf +47 -0
- data/lib/generators/project/config/deploy/virgin_conf/nginx_site_ssl.conf +57 -0
- data/lib/generators/project/config/deploy/virgin_conf/postfix.cf +685 -0
- data/lib/generators/project/config/deploy/virgin_conf/production.rb +67 -0
- data/lib/generators/project/config/deploy/virgin_conf/puma.rb +66 -0
- data/lib/generators/project/config/deploy/virgin_sh/capistrano.sh +18 -0
- data/lib/generators/project/config/deploy/virgin_sh/foreman.sh +19 -0
- data/lib/generators/project/config/deploy/virgin_sh/rvm_install.sh +10 -0
- data/lib/generators/project/config/deploy.rb +377 -0
- data/lib/generators/project/config/environments/development.rb +91 -0
- data/lib/generators/project/config/environments/production.rb +142 -0
- data/lib/generators/project/config/initializers/session_store.rb +3 -0
- data/lib/generators/project/config/locales/ru.yml +444 -0
- data/lib/generators/project/db/migrate/10_create_user_cards.rb +19 -0
- data/lib/generators/project/db/migrate/12_create_email_access_cards.rb +15 -0
- data/lib/generators/project/db/migrate/13_create_nickname_access_cards.rb +15 -0
- data/lib/generators/project/db/migrate/14_create_phone_access_cards.rb +16 -0
- data/lib/generators/project/db/migrate/15_create_oauth_access_cards.rb +19 -0
- data/lib/generators/project/db/migrate/1_create_kreators.rb +9 -0
- data/lib/generators/project/db/migrate/21_create_avatars.rb +12 -0
- data/lib/generators/project/db/migrate/30_create_countries.rb +12 -0
- data/lib/generators/project/db/migrate/32_create_cities.rb +12 -0
- data/lib/generators/project/db/migrate/3_create_admins.rb +9 -0
- data/lib/generators/project/db/migrate/44_add_sessions_table.rb +12 -0
- data/lib/generators/project/db/migrate/4_create_managers.rb +10 -0
- data/lib/generators/project/db/migrate/5_create_clients.rb +17 -0
- data/lib/generators/project/db/migrate/60_create_log_error_types.rb +9 -0
- data/lib/generators/project/db/migrate/61_create_log_errors.rb +12 -0
- data/lib/generators/project/db/migrate/78_create_delayed_jobs.rb +22 -0
- data/lib/generators/project/db/seeds.rb +27 -0
- data/lib/generators/project/geodata/cities.csv +25305 -0
- data/lib/generators/project/geodata/countries.csv +250 -0
- data/lib/generators/project/public/401.html +75 -0
- data/lib/generators/project/public/404.html +67 -0
- data/lib/generators/project/public/422.html +67 -0
- data/lib/generators/project/public/500.html +66 -0
- data/lib/generators/project/public/_receiver.html +10 -0
- data/lib/generators/project/public/apple-touch-icon-precomposed.png +0 -0
- data/lib/generators/project/public/apple-touch-icon.png +0 -0
- data/lib/generators/project/public/favicon.ico +0 -0
- data/lib/generators/project/public/robots.txt +1 -0
- data/lib/happy_birthday.rb +5 -0
- data/lib/link.rb +16 -0
- data/lib/oauth/oauth.rb +72 -0
- data/lib/oauth/oauth_fb.rb +48 -0
- data/lib/oauth/oauth_gg.rb +50 -0
- data/lib/oauth/oauth_im.rb +51 -0
- data/lib/oauth/oauth_mr.rb +53 -0
- data/lib/oauth/oauth_vk.rb +3 -0
- data/lib/oauth/oauth_yx.rb +51 -0
- data/lib/openid/openid.rb +46 -0
- data/lib/openid/openid_st.rb +2 -0
- data/lib/phone_cutter.rb +9 -0
- data/lib/response.rb +51 -0
- data/lib/session_manager.rb +47 -0
- data/lib/sms_lib.rb +30 -0
- data/lib/social_networks.rb +328 -0
- data/lib/tasks/digital_heroes_startkit_tasks.rake +83 -0
- data/lib/telegram.rb +33 -0
- metadata +497 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
class OauthController < ResponseController
|
|
2
|
+
|
|
3
|
+
before_action :set_state, only: :authorize
|
|
4
|
+
before_action :check_state, only: [:oauth_verify, :openid_verify]
|
|
5
|
+
|
|
6
|
+
def authorize
|
|
7
|
+
if params[:name].present? && params[:type].present?
|
|
8
|
+
set_oauth params[:name], params[:type]
|
|
9
|
+
else
|
|
10
|
+
ActiveRecord::Base.logger.error('имя и тип соц.сети не пришли')
|
|
11
|
+
redirect_to authorization_url, flash: {pills: 'имя и тип соц.сети не пришли'}
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# отправка пользователя на подтверждение
|
|
15
|
+
redirect_to @oauth.auth_request
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def oauth_verify
|
|
19
|
+
if params[:code].present?
|
|
20
|
+
# обмен code на токен
|
|
21
|
+
access_card_params = @oauth.auth_request :step2, {:code => params[:code]}
|
|
22
|
+
|
|
23
|
+
case access_card_params[:state]
|
|
24
|
+
when :ok
|
|
25
|
+
sign_in access_card_params
|
|
26
|
+
redirect_to profile_path
|
|
27
|
+
else
|
|
28
|
+
# данные не обработаны по причине access_card_params[:error]
|
|
29
|
+
ActiveRecord::Base.logger.error("данные не обработаны по причине #{access_card_params[:error]}")
|
|
30
|
+
# ActionCable.server.broadcast "pills", {state: 'red', message: "данные не обработаны по причине #{access_card_params[:error]}", url: authorization_url}
|
|
31
|
+
redirect_to authorization_url, flash: {pills: "данные не обработаны по причине #{access_card_params[:error]}"}
|
|
32
|
+
end
|
|
33
|
+
else
|
|
34
|
+
#code не пришёл от api соц.сети
|
|
35
|
+
ActiveRecord::Base.logger.error("code не пришёл от api соц.сети")
|
|
36
|
+
redirect_to authorization_url, flash: {pills: 'code не пришёл от api соц.сети'}
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def openid_verify
|
|
41
|
+
if params['openid.claimed_id'].present?
|
|
42
|
+
access_card_params = @oauth.oauth_access_card_params /.*\/(\d+)$/.match(params['openid.claimed_id'])[1]
|
|
43
|
+
|
|
44
|
+
case access_card_params[:state]
|
|
45
|
+
when :ok
|
|
46
|
+
sign_in access_card_params
|
|
47
|
+
redirect_to profile_path
|
|
48
|
+
else
|
|
49
|
+
# данные не обработаны по причине access_card_params[:error]
|
|
50
|
+
ActiveRecord::Base.logger.error("данные не обработаны по причине #{access_card_params[:error]}")
|
|
51
|
+
# ActionCable.server.broadcast "pills", {state: 'red', message: "данные не обработаны по причине #{access_card_params[:error]}", url: authorization_url}
|
|
52
|
+
redirect_to authorization_url, flash: {pills: "данные не обработаны по причине #{access_card_params[:error]}"}
|
|
53
|
+
end
|
|
54
|
+
else
|
|
55
|
+
#code не пришёл от api соц.сети
|
|
56
|
+
ActiveRecord::Base.logger.error("openid.claimed_id не пришёл от api соц.сети")
|
|
57
|
+
redirect_to authorization_url, flash: {pills: 'openid.claimed_id не пришёл от api соц.сети'}
|
|
58
|
+
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
private
|
|
63
|
+
|
|
64
|
+
def set_state
|
|
65
|
+
key = SecureRandom.hex(16)
|
|
66
|
+
session[:oauth_state] = {key => {name: params[:name], type: params[:type]}}
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
# проверка пришедшего state на соответствие отправленному
|
|
70
|
+
def check_state
|
|
71
|
+
state_key = nil
|
|
72
|
+
|
|
73
|
+
if params[:state].present?
|
|
74
|
+
state_key = params[:state]
|
|
75
|
+
elsif params['openid.state']
|
|
76
|
+
state_key = params['openid.state']
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
unless state_key.nil?
|
|
80
|
+
if session[:oauth_state] && session[:oauth_state].keys.first == state_key
|
|
81
|
+
state_value = session[:oauth_state].values.first
|
|
82
|
+
set_oauth state_value[:name], state_value[:type]
|
|
83
|
+
else
|
|
84
|
+
ActiveRecord::Base.logger.error("state #{state_key} подделан")
|
|
85
|
+
redirect_to authorization_url, flash: {pills: "state #{state_key} подделан"}
|
|
86
|
+
end
|
|
87
|
+
else
|
|
88
|
+
ActiveRecord::Base.logger.error('state не пришёл от api соц.сети')
|
|
89
|
+
redirect_to authorization_url, flash: {pills: 'state не пришёл от api соц.сети'}
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def set_oauth name, type
|
|
95
|
+
classname = "#{type}_#{name}"
|
|
96
|
+
require "#{type}/#{type}"
|
|
97
|
+
require "#{type}/#{classname}"
|
|
98
|
+
|
|
99
|
+
@oauth = classname.classify.constantize.new eval("#{type}_verify_url"), session[:oauth_state]
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def sign_in access_card_params
|
|
103
|
+
# есть ли у нас такая скрепа
|
|
104
|
+
access_card = OauthAccessCard.find_by({oauth_name: access_card_params[:oauth_name], oauth_uid: [:oauth_uid]})
|
|
105
|
+
# уже авторизован и решил прикрепить скрепу!
|
|
106
|
+
if @current_user_card
|
|
107
|
+
# если ли она среди карточек именно этого юзера
|
|
108
|
+
user_access_card = @current_user_card.oauth_access_cards.find_by({oauth_name: access_card_params[:oauth_name], oauth_uid: [:oauth_uid]})
|
|
109
|
+
if user_access_card.nil?
|
|
110
|
+
if access_card
|
|
111
|
+
# переезд к другому юзеру
|
|
112
|
+
u = access_card.user_card
|
|
113
|
+
access_card.update(user_id: @current_user_card.id)
|
|
114
|
+
user_access_card = access_card
|
|
115
|
+
# если забрал последнюю скрепу и нет больше карточек доступа - дезинтегрируем юзера
|
|
116
|
+
if u.access_cards_count == 0
|
|
117
|
+
u.userable.destroy
|
|
118
|
+
else
|
|
119
|
+
u.set_active_card
|
|
120
|
+
end
|
|
121
|
+
else
|
|
122
|
+
# прикрепил
|
|
123
|
+
user_access_card = @current_user_card.oauth_access_cards.create access_card_params
|
|
124
|
+
end
|
|
125
|
+
else
|
|
126
|
+
# просто заапдейтил токен и аву
|
|
127
|
+
user_access_card.update(access_token: access_card_params[:access_token], token_expired: access_card_params[:token_expired], photourl: access_card_params[:photourl])
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
profile_update
|
|
131
|
+
|
|
132
|
+
else
|
|
133
|
+
# привет старина!
|
|
134
|
+
if access_card
|
|
135
|
+
user_card = access_card.user_card
|
|
136
|
+
# обновляем токены, аву, авторизуем
|
|
137
|
+
access_card.update(access_token: access_card_params[:access_token], token_expired: access_card_params[:token_expired], photourl: access_card_params[:photourl])
|
|
138
|
+
# social_network_api :update_user_profile, sign_as, access_card # дополнение профиля пользователя данными из соц сети
|
|
139
|
+
user_card.authorize! access_card
|
|
140
|
+
current_user
|
|
141
|
+
|
|
142
|
+
# привет новичок! добро пожаловать на регистрацию!
|
|
143
|
+
else
|
|
144
|
+
# создаём клиента
|
|
145
|
+
client = Client.create
|
|
146
|
+
# и его карточку доступа
|
|
147
|
+
# остальные карточки доступа он заполняет в профиле
|
|
148
|
+
#
|
|
149
|
+
# здесь как вариант поиск юзера и сопоставление по мылу, прикрепление к нему, но это уже совсем другая история
|
|
150
|
+
#
|
|
151
|
+
access_card = client.user_card.oauth_access_cards.create(
|
|
152
|
+
{
|
|
153
|
+
oauth_name: access_card_params[:oauth_name],
|
|
154
|
+
oauth_uid: access_card_params[:oauth_uid],
|
|
155
|
+
access_token: access_card_params[:access_token],
|
|
156
|
+
token_expired: access_card_params[:token_expired],
|
|
157
|
+
photourl: access_card_params[:photourl]
|
|
158
|
+
}
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
client.user_card.update({password: SecureRandom.hex(8)})
|
|
162
|
+
|
|
163
|
+
client.user_card.authorize! access_card
|
|
164
|
+
current_user
|
|
165
|
+
profile_update
|
|
166
|
+
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# дополнение профиля пользователя данными из соц сети
|
|
174
|
+
def profile_update
|
|
175
|
+
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
end
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
class OpenidController < ResponseController
|
|
2
|
+
|
|
3
|
+
before_action :set_oauth, only: [:authorize, :verify]
|
|
4
|
+
|
|
5
|
+
def authorize
|
|
6
|
+
# отправка пользователя на подтверждение
|
|
7
|
+
redirect_to @oauth.auth_request
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def receiver
|
|
11
|
+
if params[:code].present?
|
|
12
|
+
# обмен code на токен
|
|
13
|
+
access_card_params = @oauth.auth_request :step2, {:code => params[:code]}
|
|
14
|
+
|
|
15
|
+
case access_card_params[:state]
|
|
16
|
+
when :ok
|
|
17
|
+
sign_in access_card_params
|
|
18
|
+
redirect_to profile_path
|
|
19
|
+
else
|
|
20
|
+
# данные не обработаны по причине access_card_params[:error]
|
|
21
|
+
ActiveRecord::Base.logger.error("данные не обработаны по причине #{access_card_params[:error]}")
|
|
22
|
+
# ActionCable.server.broadcast "pills", {state: 'red', message: "данные не обработаны по причине #{access_card_params[:error]}", url: authorization_url}
|
|
23
|
+
redirect_to authorization_url, flash: {pills: "данные не обработаны по причине #{access_card_params[:error]}"}
|
|
24
|
+
end
|
|
25
|
+
else
|
|
26
|
+
#code не пришёл от api соц.сети
|
|
27
|
+
ActiveRecord::Base.logger.error("code не пришёл от api соц.сети")
|
|
28
|
+
# ActionCable.server.broadcast "pills", {state: 'red', message: 'code не пришёл от api соц.сети', url: authorization_url}
|
|
29
|
+
redirect_to authorization_url, flash: {pills: 'code не пришёл от api соц.сети'}
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
private
|
|
34
|
+
|
|
35
|
+
def set_oauth
|
|
36
|
+
if params[:state].present?
|
|
37
|
+
classname = "openid_#{params[:state]}"
|
|
38
|
+
require "openid/openid"
|
|
39
|
+
require "openid/#{classname}"
|
|
40
|
+
|
|
41
|
+
@oauth = classname.classify.constantize.new oauth_verify_url, params[:state].to_sym
|
|
42
|
+
else
|
|
43
|
+
ActiveRecord::Base.logger.error('state не пришёл от api соц.сети')
|
|
44
|
+
# ActionCable.server.broadcast "pills", {state: 'red', message: 'state не пришёл от api соц.сети', url: authorization_url}
|
|
45
|
+
redirect_to authorization_url, flash: {pills: 'state не пришёл от api соц.сети'}
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def sign_in access_card_params
|
|
50
|
+
# есть ли у нас такая скрепа
|
|
51
|
+
access_card = OauthAccessCard.find_by({oauth_name: access_card_params[:oauth_name], oauth_uid: [:oauth_uid]})
|
|
52
|
+
# уже авторизован и решил прикрепить скрепу!
|
|
53
|
+
if @current_user_card
|
|
54
|
+
# если ли она среди карточек именно этого юзера
|
|
55
|
+
user_access_card = @current_user_card.oauth_access_cards.find_by({oauth_name: access_card_params[:oauth_name], oauth_uid: [:oauth_uid]})
|
|
56
|
+
if user_access_card.nil?
|
|
57
|
+
if access_card
|
|
58
|
+
# спизданул у другого юзера
|
|
59
|
+
u = access_card.user_card
|
|
60
|
+
access_card.update(user_id: @current_user_card.id)
|
|
61
|
+
user_access_card = access_card
|
|
62
|
+
# если забрал последнюю скрепу и нет больше карточек доступа - дезинтегрируем юзера
|
|
63
|
+
if u.access_cards_count == 0
|
|
64
|
+
u.userable.destroy
|
|
65
|
+
else
|
|
66
|
+
u.set_active_card
|
|
67
|
+
end
|
|
68
|
+
else
|
|
69
|
+
# прикрепил
|
|
70
|
+
user_access_card = @current_user_card.oauth_access_cards.create access_card_params
|
|
71
|
+
end
|
|
72
|
+
else
|
|
73
|
+
# просто заапдейтил токен
|
|
74
|
+
user_access_card.update(access_token: access_card_params[:access_token], token_expired: access_card_params[:token_expired])
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
profile_update
|
|
78
|
+
|
|
79
|
+
else
|
|
80
|
+
# привет старина!
|
|
81
|
+
if access_card
|
|
82
|
+
user_card = access_card.user_card
|
|
83
|
+
# обновляем токены, авторизуем
|
|
84
|
+
access_card.update(access_token: access_card_params[:access_token], token_expired: access_card_params[:token_expired])
|
|
85
|
+
# social_network_api :update_user_profile, sign_as, access_card # дополнение профиля пользователя данными из соц сети
|
|
86
|
+
user_card.authorize! access_card
|
|
87
|
+
current_user
|
|
88
|
+
|
|
89
|
+
# новичок! привет ссанина! добро пожаловать на регистрацию!
|
|
90
|
+
else
|
|
91
|
+
# создаём клиента
|
|
92
|
+
client = Client.create
|
|
93
|
+
# и его карточку доступа
|
|
94
|
+
# остальные карточки доступа он заполняет в профиле
|
|
95
|
+
#
|
|
96
|
+
# здесь как вариант поиск юзера и сопоставление по мылу, прикрепление к нему, но это уже совсем другая история
|
|
97
|
+
#
|
|
98
|
+
access_card = client.user_card.oauth_access_cards.create(
|
|
99
|
+
{
|
|
100
|
+
oauth_name: access_card_params[:oauth_name],
|
|
101
|
+
oauth_uid: access_card_params[:oauth_uid],
|
|
102
|
+
access_token: access_card_params[:access_token],
|
|
103
|
+
token_expired: access_card_params[:token_expired]
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
client.user_card.update({password: SecureRandom.hex(8)})
|
|
108
|
+
|
|
109
|
+
client.user_card.authorize! access_card
|
|
110
|
+
current_user
|
|
111
|
+
profile_update
|
|
112
|
+
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
# дополнение профиля пользователя данными из соц сети
|
|
120
|
+
def profile_update
|
|
121
|
+
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
class PhoneAccessCardsController < ApplicationController
|
|
2
|
+
layout false, only: [:create, :update]
|
|
3
|
+
before_action :set_access_card, only: [:update, :destroy]
|
|
4
|
+
|
|
5
|
+
def create
|
|
6
|
+
@access_card = PhoneAccessCard.new(access_card_params)
|
|
7
|
+
if @access_card.save
|
|
8
|
+
@result = :ok
|
|
9
|
+
else
|
|
10
|
+
@result = :fail
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def destroy
|
|
15
|
+
@access_card.destroy
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
# Use callbacks to share common setup or constraints between actions.
|
|
20
|
+
def set_access_card
|
|
21
|
+
@access_card = PhoneAccessCard.find(params[:id])
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Never trust parameters from the scary internet, only allow the white list through.
|
|
25
|
+
def access_card_params
|
|
26
|
+
params.require(:phone_access_card).permit(:user_id, :value, :active)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
class ProfileController < ResponseController
|
|
2
|
+
|
|
3
|
+
before_action :prms, only: :update
|
|
4
|
+
|
|
5
|
+
def index
|
|
6
|
+
if @current_user_card
|
|
7
|
+
@type = @current_user_card.whois
|
|
8
|
+
@name = @current_user.name
|
|
9
|
+
@avatar = @current_user.avatar
|
|
10
|
+
|
|
11
|
+
if @current_user_card.client?
|
|
12
|
+
@sex_all = Client.sex.values.map{ |sex|
|
|
13
|
+
{id: sex, name: I18n.t(sex)}
|
|
14
|
+
}
|
|
15
|
+
@sex = @current_user.sex
|
|
16
|
+
@birthday = @current_user.birthday ? @current_user.birthday.strftime("%d.%m.%Y") : nil
|
|
17
|
+
@birthday_default_view = @birthday.nil? ? (DateTime.now - 30.years).strftime("%d.%m.%Y") : @birthday
|
|
18
|
+
@country = @current_user.country
|
|
19
|
+
@city = @current_user.city
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
@access_cards = [
|
|
23
|
+
{cards: @current_user_card.nickname_access_cards, classname: 'NicknameAccessCard', by: 'nickname'},
|
|
24
|
+
{cards: @current_user_card.email_access_cards, classname: 'EmailAccessCard', by: 'email'},
|
|
25
|
+
{cards: @current_user_card.phone_access_cards, classname: 'PhoneAccessCard', by: 'phone'}
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
@access_cards.each do |cards_pack|
|
|
29
|
+
count = cards_pack[:classname].constantize.where(user_card_id: @current_user_card.id).count
|
|
30
|
+
cards_pack[:add] = count > 0 && count < CONFIG[:access_cards][cards_pack[:by].to_sym][:quantity] ? true : false
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
@ressurection_action = session[:ressurection_action]
|
|
34
|
+
session[:ressurection_action]= nil
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def update
|
|
39
|
+
|
|
40
|
+
if @current_user_card
|
|
41
|
+
begin
|
|
42
|
+
# параметры юзера
|
|
43
|
+
@current_user.update(get_user_params)
|
|
44
|
+
@current_user.errors.messages.each do |message|
|
|
45
|
+
@response.add_detail message[0]
|
|
46
|
+
end
|
|
47
|
+
# параметры юзеркарты
|
|
48
|
+
@response.add_detail 'password' unless @current_user_card.update(password: @user_card_params[:password])
|
|
49
|
+
|
|
50
|
+
CONFIG[:access_cards].keys.each do |access_card_type|
|
|
51
|
+
@user_card_params[access_card_type].each do |access_card|
|
|
52
|
+
case access_card['id']
|
|
53
|
+
when 0
|
|
54
|
+
# создание новой карты
|
|
55
|
+
@response.add_detail access_card_type.to_s unless eval "@current_user_card.#{access_card_type}_access_cards.create(value: access_card['value'])"
|
|
56
|
+
else
|
|
57
|
+
# редактирование имеющейся
|
|
58
|
+
@response.add_detail access_card_type.to_s unless "@current_user_card.#{access_card_type}_access_cards[access_card['id']].update(value: access_card['value'])"
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
rescue Exception => error
|
|
64
|
+
@response.error_state error.message
|
|
65
|
+
end
|
|
66
|
+
else
|
|
67
|
+
@response.set_state 'shit'
|
|
68
|
+
@response.add_detail 'пользователь не найден'
|
|
69
|
+
@response.set_url root_path
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
send_response
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def kill_avatar
|
|
77
|
+
|
|
78
|
+
begin
|
|
79
|
+
@current_user.avatar.destroy if @current_user.avatar.present?
|
|
80
|
+
@response.set_state 'ok'
|
|
81
|
+
rescue Exception => error
|
|
82
|
+
@response.error_state error.message
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
send_response
|
|
86
|
+
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def add_avatar
|
|
90
|
+
begin
|
|
91
|
+
@current_user.avatar.destroy unless @current_user.avatar.nil?
|
|
92
|
+
picture = @current_user.create_avatar({uploaded_file: params.require(:avatar).permit(:uploaded_file)[:uploaded_file]})
|
|
93
|
+
@response.set_state 'ok'
|
|
94
|
+
@response.add_var ({picture: {id: picture.id, src: picture.uploaded_file.url(:preview)}})
|
|
95
|
+
|
|
96
|
+
rescue Exception => error
|
|
97
|
+
@response.error_state error.message
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
send_response
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
private
|
|
104
|
+
|
|
105
|
+
def get_user_params
|
|
106
|
+
params.require(:user).permit(:name, :sex, :birthday)
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
def prms
|
|
110
|
+
require 'active_support/core_ext/hash'
|
|
111
|
+
@user_card_params = JSON.parse(params.require(:user_card)).with_indifferent_access
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
class ResponseController < ApplicationController
|
|
2
|
+
|
|
3
|
+
before_action :set_response_env
|
|
4
|
+
|
|
5
|
+
private
|
|
6
|
+
|
|
7
|
+
def set_response_env
|
|
8
|
+
require 'response'
|
|
9
|
+
|
|
10
|
+
@response = Response.new
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def send_response
|
|
14
|
+
render json: @response.get
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
end
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
class StartKitController < ActionController::Base
|
|
2
|
+
|
|
3
|
+
protect_from_forgery with: :exception
|
|
4
|
+
|
|
5
|
+
before_action :charge_session_manager, :access_level_control
|
|
6
|
+
|
|
7
|
+
def charge_session_manager
|
|
8
|
+
$session_manager.set_session session
|
|
9
|
+
$session_manager.set_cookies cookies
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
# уровень доступа
|
|
13
|
+
def access_level_control
|
|
14
|
+
current_user
|
|
15
|
+
|
|
16
|
+
if CONFIG[:access_levels][controller_name.to_sym].present?
|
|
17
|
+
access_node = CONFIG[:access_levels][controller_name.to_sym].select{|level, actions| actions.include?(action_name)} # концентрация мозга и волшебство Ruby, это прекрасно
|
|
18
|
+
if access_node.any?
|
|
19
|
+
access_granted = @current_user_card && CONFIG[:access_aliases][@access_level] >= CONFIG[:access_aliases][access_node.keys.first] # сюда вложено многое при Идеальной структуре конфигурационнного YAML!
|
|
20
|
+
unless check_access_level(:admin)
|
|
21
|
+
if access_granted && /edit/ =~ action_name # доп проверка на случай лайфхакеров желающих заняться редактированием не своих объектов, допускается редактирование всеми начиная с редактора
|
|
22
|
+
# с проверкой на friendly id
|
|
23
|
+
object = ActiveRecord::Base.connection.column_exists?(controller_name, :slug) ? controller_name.classify.constantize.friendly.find(params[:id]) : controller_name.classify.constantize.find(params[:id])
|
|
24
|
+
access_granted = edit_checkout object
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
redirect_to "/401.html" unless access_granted
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def current_user
|
|
34
|
+
unless session[:uid].nil?
|
|
35
|
+
@current_user_card = UserCard.find_by(id: session[:uid])
|
|
36
|
+
@access_level = @current_user_card.access_level.to_sym
|
|
37
|
+
else
|
|
38
|
+
@current_user_card = nil
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
@current_user = @current_user_card.nil? ? nil : @current_user_card.userable
|
|
42
|
+
@active_card = @current_user_card.my_active_card unless @current_user.nil?
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
helper_method :current_user
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
# def cookie_authorize
|
|
49
|
+
# user = UserCard.find_by(id: cookies[:uid])
|
|
50
|
+
# if user.present? && cookies[:chk] == Digest::MD5.new.update("#{user.id}#{'pussy'}#{user.password_digest}")
|
|
51
|
+
# user.authenticate(user.password)
|
|
52
|
+
# session[:uid] = user.id
|
|
53
|
+
# user
|
|
54
|
+
# else
|
|
55
|
+
# nil
|
|
56
|
+
# end
|
|
57
|
+
# end
|
|
58
|
+
|
|
59
|
+
def edit_checkout object
|
|
60
|
+
begin
|
|
61
|
+
master = object.my_master
|
|
62
|
+
rescue
|
|
63
|
+
master = nil
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
if (check_access_level CONFIG[:access_edit_bottom].to_sym)
|
|
67
|
+
access_granted = true
|
|
68
|
+
else
|
|
69
|
+
if master && @current_user
|
|
70
|
+
access_granted = (master.id == @current_user.id)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
access_granted
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
helper_method :edit_checkout
|
|
78
|
+
|
|
79
|
+
# запрос достиг ли юзер уровня доступа алиаса
|
|
80
|
+
def check_access_level _alias
|
|
81
|
+
@current_user_card && CONFIG[:access_aliases][@access_level] >= CONFIG[:access_aliases][_alias] # сюда вложено многое при Идеальной структуре конфигурационнного YAML!
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
helper_method :check_access_level
|
|
85
|
+
|
|
86
|
+
end
|