Skip to content

Commit

Permalink
Fetch user attributes from OIDC
Browse files Browse the repository at this point in the history
  • Loading branch information
ursm committed Jul 25, 2024
1 parent 8c3aa08 commit 242192c
Show file tree
Hide file tree
Showing 5 changed files with 50 additions and 34 deletions.
12 changes: 10 additions & 2 deletions api/app/controllers/auths_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ def login
code_challenge = calculate_code_challenge(code_verifier)

redirect_to oidc_client.authorization_uri(
scope: %i(openid),
scope: %i(openid ddbj email profile),
state: ,
code_challenge: ,
code_challenge_method: 'S256'
Expand All @@ -35,7 +35,15 @@ def callback
userinfo = access_token.userinfo!

user = User.find_or_initialize_by(uid: userinfo.preferred_username).tap {|user|
user.update! admin: userinfo.raw_attributes['account_type_number'] == 3
user.update!(
email: userinfo.email,
first_name: userinfo.raw_attributes['given_name'],
last_name: userinfo.raw_attributes['sn'],
organization: userinfo.raw_attributes['institution'],
department: userinfo.raw_attributes['lab_fac_dep'],
organization_url: userinfo.raw_attributes['url'],
admin: userinfo.raw_attributes['account_type_number'] == 3
)
}

render plain: <<~TEXT
Expand Down
17 changes: 8 additions & 9 deletions api/app/models/database/bioproject.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,11 @@ class Submitter
SCHEMA_TYPE_ANALYSIS = 6

def submit(submission)
user = submission.validation.user

Dway.bioproject.transaction isolation: :serializable do
submission_id = next_submission_id
submitter_id = submission.validation.user.uid
submitter_id = user.uid

Dway.bioproject[:submission].insert(
submission_id: ,
Expand Down Expand Up @@ -66,15 +68,12 @@ def submit(submission)
)
end

contact = Dway.submitterdb[:contact].where(submitter_id:, is_pi: true).first
organization = Dway.submitterdb[:organization].where(submitter_id:).first

{
first_name: contact[:first_name],
last_name: contact[:last_name],
email: contact[:email],
organization_name: organization.fetch_values(:unit, :affiliation, :department, :organization).compact_blank.join(', '),
organization_url: organization[:url],
first_name: user.first_name,
last_name: user.last_name,
email: user.email,
organization_name: [user.department, user.organization].compact_blank.join(', '),
organization_url: user.organization_url
}.each.with_index 1 do |(key, value), i|
Dway.bioproject[:submission_data].insert(
submission_id: ,
Expand Down
12 changes: 12 additions & 0 deletions api/db/migrate/20240724023242_add_basic_columns_to_users.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
class AddBasicColumnsToUsers < ActiveRecord::Migration[7.1]
def change
change_table :users do |t|
t.string :email, null: false
t.string :first_name, null: false
t.string :last_name, null: false
t.string :organization, null: false
t.string :department
t.string :organization_url
end
end
end
8 changes: 7 additions & 1 deletion api/db/schema.rb

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

35 changes: 13 additions & 22 deletions api/spec/models/database/bioproject/submitter_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -19,26 +19,17 @@ def create_submission(visibility:)
})
end

let(:user) { create(:user, uid: 'alice') }

before do
Dway.submitterdb[:contact].insert(
submitter_id: 'alice',
is_pi: true,
first_name: 'Alice',
last_name: 'Liddell',
email: 'alice@example.com'
)

Dway.submitterdb[:organization].insert(
submitter_id: 'alice',
unit: 'UNIT',
affiliation: 'AFFILIATION',
department: 'DEPARTMENT',
organization: 'ORGANIZATION',
url: 'http://example.com/organization'
)
end
let(:user) {
create(:user, **{
uid: 'alice',
email: 'alice@example.com',
first_name: 'Alice',
last_name: 'Liddell',
organization: 'Wonderland Inc.',
department: 'Rabbit Hole',
organization_url: 'http://wonderland.example.com'
})
}

example 'visibility: private' do
submission = create_submission(visibility: :private)
Expand Down Expand Up @@ -113,14 +104,14 @@ def create_submission(visibility:)
include(
submission_id: 'PSUB000001',
data_name: 'organization_name',
data_value: 'UNIT, AFFILIATION, DEPARTMENT, ORGANIZATION',
data_value: 'Rabbit Hole, Wonderland Inc.',
form_name: 'submitter',
t_order: 4
),
include(
submission_id: 'PSUB000001',
data_name: 'organization_url',
data_value: 'http://example.com/organization',
data_value: 'http://wonderland.example.com',
form_name: 'submitter',
t_order: 5
)
Expand Down

0 comments on commit 242192c

Please sign in to comment.