openstax_accounts 9.2.0 → 9.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 62551f377f8696bbba00fe09aa6aa6f05e73f19228a53ff80b887ecdd928cbf5
4
- data.tar.gz: 2c44edd556152ed485164f79c4f22eb7bf6678f3ae9f89549c3e522f33df3b7c
3
+ metadata.gz: 1364b5315f92f25857db5723efd47da0dda8a8d00f9d03171b30f9138cdfabab
4
+ data.tar.gz: 575fe4c6617a7f3e98ee876698cb8f719256d0d16982c9386692b98778cb92ac
5
5
  SHA512:
6
- metadata.gz: f99971a6f9896957b4cef704c78cc577a91ed54b5569ec887a76f347490a216cb73da401901939a46fdbf965ec1197b99ceb9b7a2a53536e0f01f7a5e6ec66d6
7
- data.tar.gz: ec791f1e30ca7465f151c7ac2e7900993d43d0c387007f046dd2107fef8fd52f76efe1a28e4425ef913b05eb7765df4319aab24d6df449782ac447bb19a98f6f
6
+ metadata.gz: 981eda25a7e6aa4548d0a7af4d16bfeaead35d1626f7a4d22b1aad3288ad26af10b24cf84a84a456418f3a9ae0e1ae0afd0de2130f7c05d5cba314497c62ef0e
7
+ data.tar.gz: fba052fb63636e613e25188c25010092ffa520ce7377e3089644cd2d9b8b44b70c3999d182bbbbe772c0ee3b8c6dc1ca6bdb9496d77521e40c600c46d3d8c3ac
@@ -27,14 +27,18 @@ module OpenStax
27
27
  end
28
28
 
29
29
  def destroy
30
- sign_out!
31
-
32
- # Unless we are stubbing, we redirect to a configurable URL, which is normally
33
- # (or at least eventually) the Accounts logout URL so that users can't sign back
34
- # in automagically.
35
- redirect_to configuration.enable_stubbing? ?
36
- main_app.root_url :
37
- configuration.logout_redirect_url(request)
30
+ # if a handler is configured, let it handle everything
31
+ if configuration.logout_handler
32
+ configuration.logout_handler.call(self)
33
+ else
34
+ # Unless we are stubbing, we redirect to a configurable URL, which is normally
35
+ # (or at least eventually) the Accounts logout URL so that users can't sign back
36
+ # in automagically.
37
+ sign_out!
38
+ redirect_to configuration.enable_stubbing? ?
39
+ main_app.root_url :
40
+ configuration.logout_redirect_url(request)
41
+ end
38
42
  end
39
43
 
40
44
  def failure
@@ -34,6 +34,7 @@ module OpenStax
34
34
  account.faculty_status ||= :no_faculty_info
35
35
  account.role ||= :unknown_role
36
36
  account.school_type ||= :unknown_school_type
37
+ account.school_location ||= :unknown_school_location
37
38
  end
38
39
 
39
40
  outputs.account.save if outputs.account.changed?
@@ -5,6 +5,7 @@ module OpenStax::Accounts
5
5
  SYNC_ATTRIBUTES = [
6
6
  :openstax_uid,
7
7
  :username,
8
+ :is_administrator,
8
9
  :first_name,
9
10
  :last_name,
10
11
  :full_name,
@@ -12,10 +13,12 @@ module OpenStax::Accounts
12
13
  :self_reported_role,
13
14
  :faculty_status,
14
15
  :school_type,
16
+ :school_location,
15
17
  :salesforce_contact_id,
16
18
  :support_identifier,
17
19
  :is_test,
18
- :is_kip
20
+ :is_kip,
21
+ :grant_tutor_access
19
22
  ]
20
23
 
21
24
  attr_accessor :syncing
@@ -26,6 +29,7 @@ module OpenStax::Accounts
26
29
  :confirmed_faculty,
27
30
  :rejected_faculty
28
31
  ]
32
+
29
33
  enum role: [
30
34
  :unknown_role,
31
35
  :student,
@@ -37,15 +41,23 @@ module OpenStax::Accounts
37
41
  :adjunct,
38
42
  :homeschool
39
43
  ]
44
+
40
45
  enum school_type: [
41
46
  :unknown_school_type,
42
47
  :other_school_type,
43
48
  :college,
44
49
  :high_school,
45
- :k12_school
50
+ :k12_school,
51
+ :home_school
52
+ ]
53
+
54
+ enum school_location: [
55
+ :unknown_school_location,
56
+ :domestic_school,
57
+ :foreign_school
46
58
  ]
47
59
 
48
- validates :faculty_status, :role, :school_type, presence: true
60
+ validates :faculty_status, :role, :school_type, :school_location, presence: true
49
61
 
50
62
  validates :uuid, presence: true, uniqueness: true
51
63
  validates :support_identifier, uniqueness: { allow_nil: true }
@@ -9,8 +9,9 @@ module OpenStax
9
9
  # and so must allow read/write on all properties
10
10
  # Do not use it in create/update APIs!
11
11
 
12
- # Otherwise, this representer can be used directly or subclassed
13
- # for an object that delegates openstax_uid, username, first_name, last_name, full_name, # title, faculty_status, role, school_type and salesforce_contact_id to an account
12
+ # This representer can be used directly or subclassed for an object that delegates
13
+ # openstax_uid, username, first_name, last_name, full_name, title, faculty_status,
14
+ # role, school_type, school_location and salesforce_contact_id to an account
14
15
 
15
16
  include Roar::JSON
16
17
 
@@ -85,6 +86,14 @@ module OpenStax
85
86
  }"
86
87
  }
87
88
 
89
+ property :school_location,
90
+ type: String,
91
+ schema_info: {
92
+ description: "One of #{
93
+ OpenStax::Accounts::Account.school_locations.keys.map(&:to_s).inspect
94
+ }"
95
+ }
96
+
88
97
  property :uuid,
89
98
  type: String,
90
99
  schema_info: {
@@ -108,6 +117,12 @@ module OpenStax
108
117
  schema_info: {
109
118
  description: 'Whether or not this is a Key Institutional Partner account'
110
119
  }
120
+
121
+ property :grant_tutor_access,
122
+ type: :boolean,
123
+ schema_info: {
124
+ description: 'Whether or not the account should be granted Tutor access'
125
+ }
111
126
  end
112
127
  end
113
128
  end
@@ -32,6 +32,8 @@ module OpenStax
32
32
  role: inputs[:role] || :unknown_role,
33
33
  uuid: SecureRandom.uuid,
34
34
  support_identifier: "cs_#{SecureRandom.hex(4)}",
35
+ school_type: inputs[:school_type] || :unknown_school_type,
36
+ school_location: inputs[:school_location] || :unknown_school_location,
35
37
  is_test: true
36
38
  )
37
39
 
@@ -7,7 +7,8 @@ module OpenStax
7
7
 
8
8
  def exec(email: nil, username: nil, password: nil, first_name: nil, last_name: nil,
9
9
  full_name: nil, title: nil, salesforce_contact_id: nil, faculty_status: nil,
10
- role: nil, school_type: nil, is_test: nil)
10
+ role: nil, school_type: nil, school_location: nil, is_kip: nil,
11
+ grant_tutor_access: nil, is_test: nil)
11
12
  raise(
12
13
  ArgumentError,
13
14
  'You must specify either an email address or a username (and an optional password)'
@@ -23,7 +24,8 @@ module OpenStax
23
24
  email: email, username: username, password: password,
24
25
  first_name: first_name, last_name: last_name, full_name: full_name,
25
26
  salesforce_contact_id: salesforce_contact_id, faculty_status: faculty_status,
26
- role: role, school_type: school_type, is_test: is_test
27
+ role: role, school_type: school_type, school_location: school_location,
28
+ is_kip: is_kip, grant_tutor_access: grant_tutor_access, is_test: is_test
27
29
  )
28
30
  fatal_error(code: :invalid_inputs) unless (200..202).include?(response.status)
29
31
 
@@ -45,7 +47,10 @@ module OpenStax
45
47
  account.faculty_status = faculty_status || :no_faculty_info
46
48
  account.role = role || :unknown_role
47
49
  account.school_type = school_type || :unknown_school_type
50
+ account.school_location = school_location || :unknown_school_location
48
51
  account.support_identifier = support_identifier
52
+ account.is_kip = is_kip
53
+ account.grant_tutor_access = grant_tutor_access
49
54
  account.is_test = is_test
50
55
  end
51
56
 
@@ -8,7 +8,7 @@ module OpenStax
8
8
  uid = attrs.delete('id')
9
9
  uuid = attrs.delete('uuid')
10
10
  account = Account.find_or_initialize_by(uuid: uuid)
11
- account.update_attributes!(attrs.slice(*Account.column_names))
11
+ account.update!(attrs.slice(*Account.column_names))
12
12
  transfer_errors_from(account, {type: :verbatim})
13
13
  outputs.account = account
14
14
  end
@@ -1,7 +1,5 @@
1
1
  # Routine for getting account updates from the Accounts server
2
- #
3
2
  # Should be scheduled to run regularly
4
-
5
3
  module OpenStax
6
4
  module Accounts
7
5
  class SyncAccounts
@@ -12,36 +10,40 @@ module OpenStax
12
10
  def exec(options={})
13
11
  return if OpenStax::Accounts.configuration.enable_stubbing?
14
12
 
15
- response = OpenStax::Accounts::Api.get_application_account_updates
13
+ loop do
14
+ response = OpenStax::Accounts::Api.get_application_account_updates
16
15
 
17
- app_accounts = []
18
- app_accounts_rep = OpenStax::Accounts::Api::V1::ApplicationAccountsRepresenter
19
- .new(app_accounts)
20
- app_accounts_rep.from_json(response.body)
16
+ app_accounts = []
17
+ app_accounts_rep = OpenStax::Accounts::Api::V1::ApplicationAccountsRepresenter.new(
18
+ app_accounts
19
+ )
20
+ app_accounts_rep.from_json(response.body)
21
21
 
22
- return if app_accounts.empty?
22
+ num_accounts = app_accounts.size
23
+ return if num_accounts == 0
23
24
 
24
- updated_app_accounts = []
25
- app_accounts.each do |app_account|
26
- account = OpenStax::Accounts::Account.find_by(
27
- uuid: app_account.account.uuid
28
- ) || app_account.account
29
- account.syncing = true
25
+ updated_app_accounts = []
26
+ app_accounts.each do |app_account|
27
+ account = OpenStax::Accounts::Account.find_by(
28
+ uuid: app_account.account.uuid
29
+ ) || app_account.account
30
+ account.syncing = true
30
31
 
31
- if account != app_account.account
32
32
  OpenStax::Accounts::Account::SYNC_ATTRIBUTES.each do |attribute|
33
- account.send("#{attribute}=", app_account.account.send(attribute))
34
- end
33
+ account.send "#{attribute}=", app_account.account.send(attribute)
34
+ end if account != app_account.account
35
+
36
+ next unless account.save
37
+
38
+ updated_app_accounts << {
39
+ user_id: account.openstax_uid, read_updates: app_account.unread_updates
40
+ }
35
41
  end
36
42
 
37
- next unless account.save
43
+ OpenStax::Accounts::Api.mark_account_updates_as_read(updated_app_accounts)
38
44
 
39
- updated_app_accounts << {
40
- user_id: account.openstax_uid, read_updates: app_account.unread_updates
41
- }
45
+ return if num_accounts < OpenStax::Accounts.configuration.max_user_updates_per_request
42
46
  end
43
-
44
- OpenStax::Accounts::Api.mark_account_updates_as_read(updated_app_accounts)
45
47
  end
46
48
  end
47
49
  end
@@ -0,0 +1,5 @@
1
+ class AddSchoolLocationToOpenStaxAccountsAccounts < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :openstax_accounts_accounts, :school_location, :integer, default: 0, null: false
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddGrantTutorAccessToOpenStaxAccountsAccounts < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :openstax_accounts_accounts, :grant_tutor_access, :boolean
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddIsAdministratorToOpenStaxAccountsAccounts < ActiveRecord::Migration[5.2]
2
+ def change
3
+ add_column :openstax_accounts_accounts, :is_administrator, :boolean
4
+ end
5
+ end
@@ -81,7 +81,9 @@ module OpenStax
81
81
  # On success, returns an OAuth2::Response object.
82
82
  def self.get_application_account_updates(options = {})
83
83
  limit = OpenStax::Accounts.configuration.max_user_updates_per_request
84
- request(:get, "application_users/updates#{ '?limit=' + limit.to_s if !limit.blank? }", options)
84
+ request(
85
+ :get, "application_users/updates#{ '?limit=' + limit.to_s if !limit.blank? }", options
86
+ )
85
87
  end
86
88
 
87
89
  # Marks account updates as "read".
@@ -53,9 +53,16 @@ module OpenStax
53
53
  # If more would be returned, the result will be empty instead
54
54
  attr_accessor :max_search_items
55
55
 
56
+ # logout_handler
57
+ # Handles logging out and redirecting user when they've requested logout
58
+ # if specified, the logout_redirect_url has no effect
59
+ attr_accessor :logout_handler
60
+
56
61
  # logout_redirect_url
57
62
  # A URL to redirect to after the app logs out, can be a string or a Proc.
58
63
  # If a Proc (or lambda), it will be called with the logout request.
64
+ #
65
+ # Only used if the logout_handler above is not specified
59
66
  # If this field is nil or if the Proc returns nil, the logout will redirect
60
67
  # to the default Accounts logout URL.
61
68
  attr_writer :logout_redirect_url
@@ -117,6 +124,7 @@ module OpenStax
117
124
  @account_user_mapper = OpenStax::Accounts::DefaultAccountUserMapper
118
125
  @min_search_characters = 3
119
126
  @max_search_items = 10
127
+ @logout_handler = nil
120
128
  @logout_redirect_url = nil
121
129
  @return_to_url_approver = nil
122
130
  @forwardable_login_params = [
@@ -1,5 +1,5 @@
1
1
  module OpenStax
2
2
  module Accounts
3
- VERSION = '9.2.0'
3
+ VERSION = '9.6.0'
4
4
  end
5
5
  end
@@ -6,6 +6,7 @@ FactoryBot.define do
6
6
  faculty_status { OpenStax::Accounts::Account.faculty_statuses[:no_faculty_info] }
7
7
  role { OpenStax::Accounts::Account.roles[:unknown_role] }
8
8
  school_type { OpenStax::Accounts::Account.school_types[:unknown_school_type] }
9
+ school_location { OpenStax::Accounts::Account.school_locations[:unknown_school_location] }
9
10
  uuid { SecureRandom.uuid }
10
11
  support_identifier { "cs_#{SecureRandom.hex(4)}" }
11
12
  is_test { true }
metadata CHANGED
@@ -1,43 +1,49 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openstax_accounts
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.2.0
4
+ version: 9.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - JP Slavinsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-23 00:00:00.000000000 Z
11
+ date: 2021-01-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '5.0'
20
+ - - "<"
21
+ - !ruby/object:Gem::Version
22
+ version: '7.0'
20
23
  type: :runtime
21
24
  prerelease: false
22
25
  version_requirements: !ruby/object:Gem::Requirement
23
26
  requirements:
24
- - - ">"
27
+ - - ">="
25
28
  - !ruby/object:Gem::Version
26
29
  version: '5.0'
30
+ - - "<"
31
+ - !ruby/object:Gem::Version
32
+ version: '7.0'
27
33
  - !ruby/object:Gem::Dependency
28
34
  name: omniauth
29
35
  requirement: !ruby/object:Gem::Requirement
30
36
  requirements:
31
- - - ">="
37
+ - - "<"
32
38
  - !ruby/object:Gem::Version
33
- version: '0'
39
+ version: '2.0'
34
40
  type: :runtime
35
41
  prerelease: false
36
42
  version_requirements: !ruby/object:Gem::Requirement
37
43
  requirements:
38
- - - ">="
44
+ - - "<"
39
45
  - !ruby/object:Gem::Version
40
- version: '0'
46
+ version: '2.0'
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: omniauth-oauth2
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -342,6 +348,9 @@ files:
342
348
  - db/migrate/14_drop_openstax_uid_and_username_uniqueness.rb
343
349
  - db/migrate/15_drop_accounts_groups.rb
344
350
  - db/migrate/16_add_is_kip_to_openstax_accounts_accounts.rb
351
+ - db/migrate/17_add_school_location_to_openstax_accounts_accounts.rb
352
+ - db/migrate/18_add_grant_tutor_access_to_openstax_accounts_accounts.rb
353
+ - db/migrate/19_add_is_administrator_to_openstax_accounts_accounts.rb
345
354
  - db/migrate/1_create_openstax_accounts_groups.rb
346
355
  - db/migrate/2_create_openstax_accounts_group_members.rb
347
356
  - db/migrate/3_create_openstax_accounts_group_owners.rb
@@ -384,7 +393,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
384
393
  - !ruby/object:Gem::Version
385
394
  version: '0'
386
395
  requirements: []
387
- rubygems_version: 3.0.3
396
+ rubygems_version: 3.1.4
388
397
  signing_key:
389
398
  specification_version: 4
390
399
  summary: Rails common code and bindings for the 'accounts' API