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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e3fe1e9662df1f455d7506864c26c6143134196a7e191b6606a4644db5e564b2
4
- data.tar.gz: 13778e9ea7baf42944c3fdfe3ccd590e1bcf8100771956dbbc12a2e1295042d9
3
+ metadata.gz: c347c2da9bdcd1f41541dee855eba3bbd6b7f79d77c52bec921cf24d273129a6
4
+ data.tar.gz: 2097e38f75e0adf9ec7fcf9c22c06d5d91ec0e2186c6c4b0eb300b50e19eed89
5
5
  SHA512:
6
- metadata.gz: e74e04ebbf93d4703146f94f23d63ec69a9d68fd9437bee355789a36f51ec010857fd5b1805b79bfb6e5880b5eac73cb883d8e51163c6ec28ea599247ae85675
7
- data.tar.gz: 9aa7d1ddfd8c37e9de254403c51469fad5a317406d5eab74001421131deef5b94e3078f3378567e3a141f1ff461cf65d741a5969fe809d3e50b0dcf320799dfa
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: [:index, :search]
6
+ before_action :allow_iframe_access, only: :index
7
7
 
8
8
  def index
9
- end
10
-
11
- def search
12
- handle_with(AccountsSearch)
9
+ handle_with AccountsSearch
13
10
  end
14
11
 
15
12
  def create
16
- handle_with(AccountsCreate,
17
- complete: lambda { redirect_to dev_accounts_path })
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(@account)
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: "Authentication failed, please try again."
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, "/profile").to_s
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[:total_count] = out[:total_count]
52
+ outputs.total_count = out.total_count
54
53
 
55
- if !@max_items.nil? && outputs[:total_count] > @max_items
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[:items] = out[:items].to_a
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) if !OpenStax::Accounts.configuration.enable_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
- while username.nil? || Account.where(username: username).exists? do
18
- username = SecureRandom.hex(3).to_s
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.new
22
-
23
- account.openstax_uid = -SecureRandom.hex(4).to_i(16)/2
24
- account.access_token = SecureRandom.hex.to_s
25
- account.username = username
26
- account.role = inputs[:role] || :unknown_role
27
- account.uuid = SecureRandom.uuid
28
- account.support_identifier = "cs_#{SecureRandom.hex(4)}"
29
- account.is_test = true
30
-
31
- account.save
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
- openstax_uid = Account.find_by(username: username)&.openstax_uid ||
19
- -SecureRandom.hex(4).to_i(16)/2
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.find_or_initialize_by(uuid: uuid)
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(account, {type: :verbatim}, true)
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 "openstax/accounts/application", :media => "all" %>
6
- <%= javascript_include_tag "openstax/accounts/application" %>
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[:total_count]
2
- accounts = @handler_result.outputs[:items] %>
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%', '40%', '40%'],
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: "Username" %>&nbsp;
13
+ <%= f.text_field :username, placeholder: 'Username' %>&nbsp;
15
14
  <%= f.select :role, OpenStax::Accounts::Account.roles.keys.map{|rr| [rr, rr]} %>&nbsp;
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 :partial => 'openstax/accounts/shared/accounts/search',
27
- :locals => {
28
- :search_action_path => openstax_accounts.search_dev_accounts_path,
29
- :remote => true,
30
- :method => :get
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>
@@ -1,3 +1,11 @@
1
1
  <% handler_errors.each do |error| %>
2
- <%= error.translate %>
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
- # Clients of this partial can override the following variables:
3
- search_action_path ||= nil
4
- method ||= :get
5
- remote ||= false
6
- form_html ||= {id: 'search-form',
7
- class: 'form-inline'}
8
- search_types ||= ['Any', 'Username', 'Name',
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
@@ -11,7 +11,6 @@ OpenStax::Accounts::Engine.routes.draw do
11
11
  namespace :dev do
12
12
  resources :accounts, only: [:index, :create] do
13
13
  post 'become', on: :member
14
- get 'search', on: :collection
15
14
  end
16
15
  end
17
16
  end
@@ -1,5 +1,5 @@
1
1
  module OpenStax
2
2
  module Accounts
3
- VERSION = "9.0.0"
3
+ VERSION = '9.0.1'
4
4
  end
5
5
  end
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.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-22 00:00:00.000000000 Z
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/search.js.erb
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