openstax_accounts 9.0.0 → 9.0.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 +4 -4
- data/app/controllers/openstax/accounts/application_controller.rb +0 -4
- data/app/controllers/openstax/accounts/dev/accounts_controller.rb +15 -8
- data/app/controllers/openstax/accounts/dev/base_controller.rb +1 -5
- data/app/controllers/openstax/accounts/sessions_controller.rb +2 -4
- data/app/handlers/openstax/accounts/accounts_search.rb +3 -5
- data/app/handlers/openstax/accounts/dev/accounts_create.rb +1 -7
- data/app/handlers/openstax/accounts/dev/accounts_search.rb +0 -2
- data/app/routines/openstax/accounts/dev/create_account.rb +23 -21
- data/app/routines/openstax/accounts/find_or_create_account.rb +6 -14
- data/app/views/layouts/openstax/accounts/application.html.erb +2 -2
- data/app/views/openstax/accounts/dev/accounts/_search_results.html.erb +6 -7
- data/app/views/openstax/accounts/dev/accounts/index.html.erb +7 -10
- data/app/views/openstax/accounts/dev/accounts/{search.js.erb → index.js.erb} +0 -0
- data/app/views/openstax/accounts/shared/_attention.html.erb +9 -1
- data/app/views/openstax/accounts/shared/accounts/_search.html.erb +12 -8
- data/config/routes.rb +0 -1
- data/lib/openstax/accounts/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c347c2da9bdcd1f41541dee855eba3bbd6b7f79d77c52bec921cf24d273129a6
|
4
|
+
data.tar.gz: 2097e38f75e0adf9ec7fcf9c22c06d5d91ec0e2186c6c4b0eb300b50e19eed89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 75c9be78797c373628000ac7cb60e6c709703c654e48439598a7f4eab489b8a0f87e5e1192cf417fb9888268db7cddbeb31eaffe9a2766bca790ffea8da7f80f
|
7
|
+
data.tar.gz: 25d3e2905e157f00eb11a21db5918a5dc52eb97e68b14df1396b1cd4aa1fda5495c4b618a12d98d182b514e0699151d2f2bd11573ef14556c9219cf21e2986bc
|
@@ -1,8 +1,6 @@
|
|
1
1
|
module OpenStax
|
2
2
|
module Accounts
|
3
|
-
|
4
3
|
class ApplicationController < ::ActionController::Base
|
5
|
-
|
6
4
|
include Lev::HandleWith
|
7
5
|
|
8
6
|
skip_before_action :authenticate_user!, raise: false
|
@@ -10,8 +8,6 @@ module OpenStax
|
|
10
8
|
def configuration
|
11
9
|
OpenStax::Accounts.configuration
|
12
10
|
end
|
13
|
-
|
14
11
|
end
|
15
|
-
|
16
12
|
end
|
17
13
|
end
|
@@ -3,23 +3,30 @@ module OpenStax
|
|
3
3
|
module Dev
|
4
4
|
class AccountsController < OpenStax::Accounts::Dev::BaseController
|
5
5
|
# Allow accessing from inside an iframe
|
6
|
-
before_action :allow_iframe_access, only:
|
6
|
+
before_action :allow_iframe_access, only: :index
|
7
7
|
|
8
8
|
def index
|
9
|
-
|
10
|
-
|
11
|
-
def search
|
12
|
-
handle_with(AccountsSearch)
|
9
|
+
handle_with AccountsSearch
|
13
10
|
end
|
14
11
|
|
15
12
|
def create
|
16
|
-
handle_with(
|
17
|
-
|
13
|
+
handle_with(
|
14
|
+
AccountsCreate,
|
15
|
+
success: -> do
|
16
|
+
username = @handler_result.outputs.account.username
|
17
|
+
flash.notice = "Account with username \"#{username}\" created."
|
18
|
+
redirect_to dev_accounts_path(search: { query: username })
|
19
|
+
end,
|
20
|
+
failure: -> do
|
21
|
+
flash.alert = @handler_result.errors.first.translate
|
22
|
+
redirect_to dev_accounts_path(search: { query: params.dig(:create, :username) })
|
23
|
+
end
|
24
|
+
)
|
18
25
|
end
|
19
26
|
|
20
27
|
def become
|
21
28
|
@account = Account.find(params[:id])
|
22
|
-
sign_in
|
29
|
+
sign_in @account
|
23
30
|
redirect_back key: :accounts_return_to, strategies: [:session]
|
24
31
|
end
|
25
32
|
|
@@ -2,11 +2,7 @@ module OpenStax
|
|
2
2
|
module Accounts
|
3
3
|
module Dev
|
4
4
|
class BaseController < OpenStax::Accounts::ApplicationController
|
5
|
-
|
6
|
-
before_action do
|
7
|
-
raise SecurityTransgression if Rails.env.production?
|
8
|
-
end
|
9
|
-
|
5
|
+
before_action { raise SecurityTransgression if Rails.env.production? }
|
10
6
|
end
|
11
7
|
end
|
12
8
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module OpenStax
|
2
2
|
module Accounts
|
3
3
|
class SessionsController < OpenStax::Accounts::ApplicationController
|
4
|
-
|
5
4
|
def new
|
6
5
|
if configuration.is_return_to_url_approved?(params[:return_to])
|
7
6
|
store_url url: params[:return_to], key: :accounts_return_to, strategies: [:session]
|
@@ -40,14 +39,13 @@ module OpenStax
|
|
40
39
|
end
|
41
40
|
|
42
41
|
def failure
|
43
|
-
redirect_back key: :accounts_return_to, alert:
|
42
|
+
redirect_back key: :accounts_return_to, alert: 'Authentication failed, please try again.'
|
44
43
|
end
|
45
44
|
|
46
45
|
def profile
|
47
46
|
# TODO: stub profile if stubbing is enabled
|
48
|
-
redirect_to URI.join(configuration.openstax_accounts_url,
|
47
|
+
redirect_to URI.join(configuration.openstax_accounts_url, '/profile').to_s
|
49
48
|
end
|
50
|
-
|
51
49
|
end
|
52
50
|
end
|
53
51
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module OpenStax
|
2
2
|
module Accounts
|
3
3
|
class AccountsSearch
|
4
|
-
|
5
4
|
lev_handler
|
6
5
|
|
7
6
|
paramify :search do
|
@@ -50,17 +49,16 @@ module OpenStax
|
|
50
49
|
page: search_params.page,
|
51
50
|
per_page: search_params.per_page}
|
52
51
|
out = run(OpenStax::Accounts::SearchAccounts, params).outputs
|
53
|
-
outputs
|
52
|
+
outputs.total_count = out.total_count
|
54
53
|
|
55
|
-
if !@max_items.nil? && outputs
|
54
|
+
if !@max_items.nil? && outputs.total_count > @max_items
|
56
55
|
fatal_error(code: :too_many_items,
|
57
56
|
message: "The number of matches exceeded the allowed limit of #{
|
58
57
|
@max_items} matches. Please refine your query and try again.")
|
59
58
|
end
|
60
59
|
|
61
|
-
outputs
|
60
|
+
outputs.items = out.items.to_a
|
62
61
|
end
|
63
|
-
|
64
62
|
end
|
65
63
|
end
|
66
64
|
end
|
@@ -1,21 +1,17 @@
|
|
1
1
|
module OpenStax
|
2
2
|
module Accounts
|
3
|
-
|
4
3
|
module Dev
|
5
4
|
class AccountsCreate
|
6
|
-
|
7
5
|
lev_handler
|
8
6
|
|
9
7
|
paramify :create do
|
10
8
|
attribute :username, type: String
|
11
|
-
validates :username, presence: true
|
12
9
|
attribute :role, type: String
|
13
10
|
end
|
14
11
|
|
15
12
|
uses_routine OpenStax::Accounts::Dev::CreateAccount,
|
16
13
|
as: :create_account,
|
17
|
-
translations: { inputs: { scope: :create },
|
18
|
-
outputs: { type: :verbatim } }
|
14
|
+
translations: { inputs: { scope: :create }, outputs: { type: :verbatim } }
|
19
15
|
|
20
16
|
protected
|
21
17
|
|
@@ -26,9 +22,7 @@ module OpenStax
|
|
26
22
|
def handle
|
27
23
|
run(:create_account, create_params.as_hash(:username, :role))
|
28
24
|
end
|
29
|
-
|
30
25
|
end
|
31
26
|
end
|
32
|
-
|
33
27
|
end
|
34
28
|
end
|
@@ -2,7 +2,6 @@ module OpenStax
|
|
2
2
|
module Accounts
|
3
3
|
module Dev
|
4
4
|
class AccountsSearch < OpenStax::Accounts::AccountsSearch
|
5
|
-
|
6
5
|
paramify :search do
|
7
6
|
attribute :type, type: String
|
8
7
|
attribute :query, type: String
|
@@ -21,7 +20,6 @@ module OpenStax
|
|
21
20
|
def authorized?
|
22
21
|
!Rails.env.production?
|
23
22
|
end
|
24
|
-
|
25
23
|
end
|
26
24
|
end
|
27
25
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
# Routine for creating an account, only for use when stubbing and
|
2
|
-
# not on production.
|
1
|
+
# Routine for creating an account, only for use when stubbing and not on production.
|
3
2
|
|
4
3
|
module OpenStax
|
5
4
|
module Accounts
|
@@ -11,30 +10,33 @@ module OpenStax
|
|
11
10
|
|
12
11
|
def exec(inputs={})
|
13
12
|
fatal_error(code: :cannot_create_account_in_production) if Rails.env.production?
|
14
|
-
fatal_error(code: :can_only_create_account_when_stubbing)
|
13
|
+
fatal_error(code: :can_only_create_account_when_stubbing) \
|
14
|
+
unless OpenStax::Accounts.configuration.enable_stubbing?
|
15
15
|
|
16
16
|
username = inputs[:username]
|
17
|
-
|
18
|
-
username
|
17
|
+
if username.blank?
|
18
|
+
while username.blank? || Account.where(username: username).exists? do
|
19
|
+
username = SecureRandom.hex(3).to_s
|
20
|
+
end
|
21
|
+
else
|
22
|
+
fatal_error(
|
23
|
+
code: :account_already_exists,
|
24
|
+
message: "One or more accounts with username \"#{username}\" already exist."
|
25
|
+
) if Account.where(username: username).exists?
|
19
26
|
end
|
20
27
|
|
21
|
-
account = OpenStax::Accounts::Account.
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
account
|
32
|
-
|
33
|
-
transfer_errors_from(account, {type: :verbatim}, true)
|
34
|
-
|
35
|
-
outputs[:account] = account
|
28
|
+
outputs.account = OpenStax::Accounts::Account.create(
|
29
|
+
openstax_uid: -SecureRandom.hex(4).to_i(16)/2,
|
30
|
+
access_token: SecureRandom.hex.to_s,
|
31
|
+
username: username,
|
32
|
+
role: inputs[:role] || :unknown_role,
|
33
|
+
uuid: SecureRandom.uuid,
|
34
|
+
support_identifier: "cs_#{SecureRandom.hex(4)}",
|
35
|
+
is_test: true
|
36
|
+
)
|
37
|
+
|
38
|
+
transfer_errors_from(outputs.account, {type: :verbatim}, true)
|
36
39
|
end
|
37
|
-
|
38
40
|
end
|
39
41
|
end
|
40
42
|
end
|
@@ -15,12 +15,11 @@ module OpenStax
|
|
15
15
|
|
16
16
|
if OpenStax::Accounts.configuration.enable_stubbing
|
17
17
|
# We can only stub finding by username b/c accounts-rails doesn't persist emails
|
18
|
-
|
19
|
-
|
20
|
-
uuid = SecureRandom.uuid
|
18
|
+
uuid = Account.find_by(username: username)&.uuid || SecureRandom.uuid
|
19
|
+
openstax_uid = -SecureRandom.hex(4).to_i(16)/2
|
21
20
|
support_identifier = "cs_#{SecureRandom.hex(4)}"
|
22
21
|
else
|
23
|
-
response = Api.find_or_create_account(
|
22
|
+
response = OpenStax::Accounts::Api.find_or_create_account(
|
24
23
|
email: email, username: username, password: password,
|
25
24
|
first_name: first_name, last_name: last_name, full_name: full_name,
|
26
25
|
salesforce_contact_id: salesforce_contact_id, faculty_status: faculty_status,
|
@@ -35,12 +34,8 @@ module OpenStax
|
|
35
34
|
support_identifier = struct.support_identifier
|
36
35
|
end
|
37
36
|
|
38
|
-
account = Account.
|
39
|
-
|
40
|
-
unless account.persisted?
|
41
|
-
while username.nil? || Account.where(username: username).exists? do
|
42
|
-
username = SecureRandom.hex(3).to_s
|
43
|
-
end
|
37
|
+
outputs.account = Account.find_or_create_by(uuid: uuid) do |account|
|
38
|
+
account.openstax_uid = openstax_uid
|
44
39
|
account.username = username
|
45
40
|
account.first_name = first_name
|
46
41
|
account.last_name = last_name
|
@@ -50,14 +45,11 @@ module OpenStax
|
|
50
45
|
account.faculty_status = faculty_status || :no_faculty_info
|
51
46
|
account.role = role || :unknown_role
|
52
47
|
account.school_type = school_type || :unknown_school_type
|
53
|
-
account.openstax_uid = openstax_uid
|
54
48
|
account.support_identifier = support_identifier
|
55
49
|
account.is_test = is_test
|
56
|
-
account.save!
|
57
50
|
end
|
58
51
|
|
59
|
-
transfer_errors_from
|
60
|
-
outputs.account = account
|
52
|
+
transfer_errors_from outputs.account, { type: :verbatim }, true
|
61
53
|
end
|
62
54
|
end
|
63
55
|
end
|
@@ -2,8 +2,8 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<title>Accounts</title>
|
5
|
-
<%= stylesheet_link_tag
|
6
|
-
<%= javascript_include_tag
|
5
|
+
<%= stylesheet_link_tag 'openstax/accounts/application', media: 'all' %>
|
6
|
+
<%= javascript_include_tag 'openstax/accounts/application' %>
|
7
7
|
<%= csrf_meta_tags %>
|
8
8
|
</head>
|
9
9
|
<body>
|
@@ -1,5 +1,5 @@
|
|
1
|
-
<% total_count = @handler_result.outputs
|
2
|
-
accounts = @handler_result.outputs[
|
1
|
+
<% total_count = @handler_result.outputs.total_count
|
2
|
+
accounts = @handler_result.outputs.items || [] %>
|
3
3
|
|
4
4
|
<div id='search-results-count'>
|
5
5
|
<%= pluralize(total_count, 'user') %> found.
|
@@ -9,14 +9,13 @@
|
|
9
9
|
<%= osu.action_list(
|
10
10
|
records: accounts,
|
11
11
|
list: {
|
12
|
-
headings: ['UID', 'Username (click to sign in as)', 'Name'],
|
13
|
-
widths: ['20%', '
|
12
|
+
headings: ['UID', 'UUID', 'Username (click to sign in as)', 'Name'],
|
13
|
+
widths: ['20%', '20%', '30%', '30%'],
|
14
14
|
data_procs: [
|
15
15
|
->(account) { account.openstax_uid },
|
16
|
+
->(account) { account.uuid },
|
16
17
|
->(account) {
|
17
|
-
link_to account.username, become_dev_account_path(
|
18
|
-
account.openstax_uid
|
19
|
-
), method: :post
|
18
|
+
link_to account.username, become_dev_account_path(account.id), method: :post
|
20
19
|
},
|
21
20
|
->(account) { account.name || '---' }
|
22
21
|
]
|
@@ -1,5 +1,4 @@
|
|
1
1
|
<div class="openstax-accounts development-login">
|
2
|
-
|
3
2
|
<%= render partial: 'openstax/accounts/shared/attention' %>
|
4
3
|
|
5
4
|
<h3>Create an Account</h3>
|
@@ -11,7 +10,7 @@
|
|
11
10
|
|
12
11
|
|
13
12
|
<div class="form-group">
|
14
|
-
<%= f.text_field :username, placeholder:
|
13
|
+
<%= f.text_field :username, placeholder: 'Username' %>
|
15
14
|
<%= f.select :role, OpenStax::Accounts::Account.roles.keys.map{|rr| [rr, rr]} %>
|
16
15
|
<%= f.submit 'Create', class: 'btn btn-primary' %>
|
17
16
|
</div>
|
@@ -23,15 +22,13 @@
|
|
23
22
|
<p>You need to login, but we're not connected to the Accounts server.<br>
|
24
23
|
Search for a user below and click the sign in link next to him or her.</p>
|
25
24
|
|
26
|
-
<%= render :
|
27
|
-
:
|
28
|
-
:
|
29
|
-
:
|
30
|
-
:
|
25
|
+
<%= render partial: 'openstax/accounts/shared/accounts/search',
|
26
|
+
locals: {
|
27
|
+
search_action_path: openstax_accounts.dev_accounts_path,
|
28
|
+
search_results_partial: 'openstax/accounts/dev/accounts/search_results',
|
29
|
+
remote: true,
|
30
|
+
method: :get
|
31
31
|
} %>
|
32
32
|
|
33
33
|
<br>
|
34
|
-
|
35
|
-
<div id="search-results"></div>
|
36
|
-
|
37
34
|
</div>
|
File without changes
|
@@ -1,3 +1,11 @@
|
|
1
1
|
<% handler_errors.each do |error| %>
|
2
|
-
|
2
|
+
<div class="error"><%= error.translate %></div>
|
3
|
+
<% end %>
|
4
|
+
|
5
|
+
<% if flash.alert %>
|
6
|
+
<div class="alert"><%= flash.alert %></div>
|
7
|
+
<% end %>
|
8
|
+
|
9
|
+
<% if flash.notice %>
|
10
|
+
<div class="notice"><%= flash.notice %></div>
|
3
11
|
<% end %>
|
@@ -1,12 +1,11 @@
|
|
1
1
|
<%
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
'First Name', 'Last Name', 'Email']
|
2
|
+
# Clients of this partial can override the following variables:
|
3
|
+
search_action_path ||= nil
|
4
|
+
search_results_partial ||= nil
|
5
|
+
method ||= :get
|
6
|
+
remote ||= false
|
7
|
+
form_html ||= {id: 'search-form', class: 'form-inline'}
|
8
|
+
search_types ||= ['Any', 'Username', 'Name', 'First Name', 'Last Name', 'Email']
|
10
9
|
%>
|
11
10
|
|
12
11
|
<%= lev_form_for :search,
|
@@ -26,6 +25,11 @@
|
|
26
25
|
|
27
26
|
<% end %>
|
28
27
|
|
28
|
+
<div id="search-results">
|
29
|
+
<% unless search_results_partial.blank? %>
|
30
|
+
<%= render partial: search_results_partial %>
|
31
|
+
<% end %>
|
32
|
+
</div>
|
29
33
|
|
30
34
|
<script>
|
31
35
|
var input = $('input[name="search[query]"]');
|
data/config/routes.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: openstax_accounts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 9.0.
|
4
|
+
version: 9.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- JP Slavinsky
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-11-
|
11
|
+
date: 2019-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -330,7 +330,7 @@ files:
|
|
330
330
|
- app/views/layouts/openstax/accounts/application.html.erb
|
331
331
|
- app/views/openstax/accounts/dev/accounts/_search_results.html.erb
|
332
332
|
- app/views/openstax/accounts/dev/accounts/index.html.erb
|
333
|
-
- app/views/openstax/accounts/dev/accounts/
|
333
|
+
- app/views/openstax/accounts/dev/accounts/index.js.erb
|
334
334
|
- app/views/openstax/accounts/shared/_attention.html.erb
|
335
335
|
- app/views/openstax/accounts/shared/accounts/_search.html.erb
|
336
336
|
- config/routes.rb
|