uc3-dmp-rds 0.0.11 → 0.0.13

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: 9758c1818c2bd5f8b44b16bc01bf5a99a98ef04fba84d4e123bc970978e8322c
4
- data.tar.gz: b311b8e02f25fb735831b63758d86e9691c3d2e71595016d43281019a385c26d
3
+ metadata.gz: 1866fcb5ab8870fe909f30010bae7fe9b84ea1b1f8449075dcd7eaf3552e5a92
4
+ data.tar.gz: 7f01d3802e480af2c253fdf3c56d23fdcb1d624a4511d09938d33dda49a3c192
5
5
  SHA512:
6
- metadata.gz: aeb916ba0027daececd547e5a80146eb579f3c6eb8f05d23a395c8cf0b676132b923ef1488e38492c0301b28e374eae7854a347217f09f15be5a367eb7ee883e
7
- data.tar.gz: e90e2d8628a56e911aed3d2b2c182520fc5c7d985b91148c91dab378d07e92f4acd160cb041cada3a6fee792ac4c5d1364a08ee82148917792205f3ad478c6c0
6
+ metadata.gz: cb4f83e0f493c1300f3231bde8c5f7bfb805a0adaf8d15e8d7cd84bc31ff6251917effc5162c6c370dcefce5775a4acda56de14d3728c2d1030c8cbece37e805
7
+ data.tar.gz: cf06caa490d75570cc0f9211d96d6bcc92aa61abff81160ef70c05355932f7dce4eade037409711ecf7e829ae829b50f465873a341f1d7ed92681cd3fdca4964
@@ -14,14 +14,44 @@ module Uc3DmpRds
14
14
  MSG_INACTIVE_USER = 'User is inactive'
15
15
 
16
16
  class << self
17
+ # Retrieves the User API token from the headers
18
+ def token_from_headers(headers: {})
19
+ return nil unless headers.is_a?(Hash) && headers.keys.any?
20
+
21
+ authorization = json.select { |k, _v| k.downcase.strip == 'authorization' }
22
+ parts = authorization.split(' ')
23
+ return nil unless parts.first.downcase == 'token' && parts.length == 2
24
+
25
+ parts.last.strip
26
+ end
27
+
28
+ # Look up the user based on the API token. Will fail if Uc3DmpRds::Adapter does not
29
+ # have an established connection!
17
30
  def authenticate(token:)
18
31
  raise AuthenticatorError, MSG_INVALID_TOKEN if token.nil? || token.to_s.strip.empty?
19
32
 
33
+ users = _query_user(token: token)
34
+ raise AuthenticatorError, MSG_INVALID_TOKEN unless users.is_a?(Array) && users.any?
35
+
36
+ user = users.first
37
+ raise AuthenticatorError, MSG_INACTIVE_USER unless user['active']
38
+
39
+ _serialize_user(user: user)
40
+ end
41
+
42
+ private
43
+
44
+ # Query ActiveRecord for the User's record
45
+ def _query_user(token:)
46
+ return nil if token.nil?
47
+
20
48
  sql = <<~SQL.squish
21
49
  SELECT users.firstname, users.surname, users.email, users.active, i.value orcid,
22
- orgs.name org_name, ro.name ror_name, ro.ror_id
50
+ orgs.name org_name, ro.name ror_name, ro.ror_id, perms.name perm_name
23
51
  FROM users
24
52
  INNER JOIN orgs ON users.org_id = orgs.id
53
+ LEFT OUTER JOIN users_perms up ON users.id = up.user_id
54
+ LEFT OUTER JOIN perms ON up.perm_id = perms.id AND perms.name = 'modify_templates'
25
55
  LEFT OUTER JOIN registry_orgs ro
26
56
  ON orgs.id = ro.org_id
27
57
  LEFT OUTER JOIN identifiers i
@@ -32,12 +62,17 @@ module Uc3DmpRds
32
62
  LIMIT 1
33
63
  SQL
34
64
  users = ActiveRecord::Base.simple_execute(sql, token: token.to_s.strip)
35
- raise AuthenticatorError, MSG_INVALID_TOKEN unless users.is_a?(Array) and users.any?
65
+ end
36
66
 
37
- user = users.first
38
- raise AuthenticatorError, MSG_INACTIVE_USER unless user['active']
67
+ # Convert the ActiveRecord query results into a JSON object
68
+ def _serialize_user(user:)
69
+ return {} if user.nil? || user['mbox'].nil?
39
70
 
40
- hash = { name: [user['surname'], user['firstname']].join(', '), mbox: user['email'] }
71
+ hash = {
72
+ name: [user['surname'], user['firstname']].join(', '),
73
+ mbox: user['email'],
74
+ admin: !user['perm_name'].nil?
75
+ }
41
76
  hash[:user_id] = { type: 'orcid', identifier: user['orcid'] } unless user['orcid'].nil?
42
77
  return hash.to_json if user['org_name'].nil?
43
78
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Uc3DmpRds
4
- VERSION = '0.0.11'
4
+ VERSION = '0.0.13'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uc3-dmp-rds
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brian Riley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-24 00:00:00.000000000 Z
11
+ date: 2023-05-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: active_record_simple_execute