passageidentity 0.6.2 → 0.7.0
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/lib/openapi_client/api/apps_api.rb +2 -2
- data/lib/openapi_client/api/magic_links_api.rb +4 -4
- data/lib/openapi_client/api/tokens_api.rb +2 -2
- data/lib/openapi_client/api/user_devices_api.rb +3 -3
- data/lib/openapi_client/api/users_api.rb +8 -8
- data/lib/openapi_client/api_client.rb +36 -30
- data/lib/openapi_client/api_error.rb +1 -1
- data/lib/openapi_client/configuration.rb +11 -1
- data/lib/openapi_client/models/app_info.rb +36 -3
- data/lib/openapi_client/models/app_response.rb +1 -1
- data/lib/openapi_client/models/apple_user_social_connection.rb +1 -1
- data/lib/openapi_client/models/auth_methods.rb +1 -1
- data/lib/openapi_client/models/create_magic_link_request.rb +2 -57
- data/lib/openapi_client/models/create_user_request.rb +1 -1
- data/lib/openapi_client/models/element_customization.rb +1 -1
- data/lib/openapi_client/models/font_family.rb +1 -1
- data/lib/openapi_client/models/github_user_social_connection.rb +1 -1
- data/lib/openapi_client/models/google_user_social_connection.rb +1 -1
- data/lib/openapi_client/models/layout_config.rb +1 -1
- data/lib/openapi_client/models/layouts.rb +1 -1
- data/lib/openapi_client/models/link.rb +1 -1
- data/lib/openapi_client/models/list_devices_response.rb +1 -1
- data/lib/openapi_client/models/list_paginated_users_item.rb +19 -2
- data/lib/openapi_client/models/list_paginated_users_response.rb +1 -1
- data/lib/openapi_client/models/magic_link.rb +1 -1
- data/lib/openapi_client/models/magic_link_auth_method.rb +1 -1
- data/lib/openapi_client/models/magic_link_channel.rb +1 -1
- data/lib/openapi_client/models/magic_link_response.rb +1 -1
- data/lib/openapi_client/models/magic_link_type.rb +1 -1
- data/lib/openapi_client/models/model400_error.rb +1 -1
- data/lib/openapi_client/models/model401_error.rb +1 -1
- data/lib/openapi_client/models/model403_error.rb +1 -1
- data/lib/openapi_client/models/model404_error.rb +3 -3
- data/lib/openapi_client/models/model500_error.rb +1 -1
- data/lib/openapi_client/models/nonce.rb +1 -1
- data/lib/openapi_client/models/otp_auth_method.rb +1 -1
- data/lib/openapi_client/models/paginated_links.rb +1 -1
- data/lib/openapi_client/models/passkeys_auth_method.rb +1 -1
- data/lib/openapi_client/models/social_connection_type.rb +41 -0
- data/lib/openapi_client/models/technologies.rb +1 -1
- data/lib/openapi_client/models/theme_type.rb +41 -0
- data/lib/openapi_client/models/ttl_display_unit.rb +1 -1
- data/lib/openapi_client/models/update_user_request.rb +1 -1
- data/lib/openapi_client/models/user_event_action.rb +41 -0
- data/lib/openapi_client/models/user_event_status.rb +1 -1
- data/lib/openapi_client/models/user_info.rb +19 -2
- data/lib/openapi_client/models/user_metadata_field.rb +1 -1
- data/lib/openapi_client/models/user_metadata_field_type.rb +1 -1
- data/lib/openapi_client/models/user_recent_event.rb +51 -5
- data/lib/openapi_client/models/user_response.rb +1 -1
- data/lib/openapi_client/models/user_social_connections.rb +1 -1
- data/lib/openapi_client/models/user_status.rb +1 -1
- data/lib/openapi_client/models/web_authn_devices.rb +1 -1
- data/lib/openapi_client/models/web_authn_icons.rb +1 -1
- data/lib/openapi_client/models/web_authn_type.rb +1 -1
- data/lib/openapi_client/version.rb +1 -1
- data/lib/openapi_client.rb +4 -4
- data/lib/passageidentity/auth.rb +205 -104
- data/lib/passageidentity/client.rb +71 -59
- data/lib/passageidentity/error.rb +42 -16
- data/lib/passageidentity/user_api.rb +120 -161
- data/lib/passageidentity/version.rb +1 -1
- data/lib/passageidentity.rb +6 -2
- metadata +33 -79
- data/.github/workflows/deploy.yml +0 -30
- data/.github/workflows/on-pull-request.yml +0 -33
- data/.gitignore +0 -58
- data/CHANGELOG.md +0 -57
- data/CONTRIBUTING.md +0 -66
- data/Gemfile +0 -13
- data/LICENSE +0 -21
- data/README.md +0 -84
- data/docs/custom/AuthApi.md +0 -141
- data/docs/custom/ClientApi.md +0 -107
- data/docs/custom/UserApi.md +0 -419
- data/docs/generated/AppInfo.md +0 -94
- data/docs/generated/AppResponse.md +0 -18
- data/docs/generated/AppleUserSocialConnection.md +0 -24
- data/docs/generated/AppsApi.md +0 -77
- data/docs/generated/AuthMethods.md +0 -22
- data/docs/generated/CreateMagicLinkRequest.md +0 -36
- data/docs/generated/CreateUserRequest.md +0 -22
- data/docs/generated/ElementCustomization.md +0 -56
- data/docs/generated/FontFamily.md +0 -15
- data/docs/generated/GithubUserSocialConnection.md +0 -24
- data/docs/generated/GoogleUserSocialConnection.md +0 -24
- data/docs/generated/LayoutConfig.md +0 -26
- data/docs/generated/Layouts.md +0 -20
- data/docs/generated/Link.md +0 -18
- data/docs/generated/ListDevicesResponse.md +0 -18
- data/docs/generated/ListPaginatedUsersItem.md +0 -38
- data/docs/generated/ListPaginatedUsersResponse.md +0 -28
- data/docs/generated/MagicLink.md +0 -36
- data/docs/generated/MagicLinkAuthMethod.md +0 -22
- data/docs/generated/MagicLinkChannel.md +0 -15
- data/docs/generated/MagicLinkResponse.md +0 -18
- data/docs/generated/MagicLinkType.md +0 -15
- data/docs/generated/MagicLinksApi.md +0 -79
- data/docs/generated/Model400Error.md +0 -20
- data/docs/generated/Model401Error.md +0 -20
- data/docs/generated/Model403Error.md +0 -20
- data/docs/generated/Model404Error.md +0 -20
- data/docs/generated/Model500Error.md +0 -20
- data/docs/generated/Nonce.md +0 -18
- data/docs/generated/OtpAuthMethod.md +0 -22
- data/docs/generated/PaginatedLinks.md +0 -26
- data/docs/generated/PasskeysAuthMethod.md +0 -18
- data/docs/generated/README.md +0 -158
- data/docs/generated/Technologies.md +0 -15
- data/docs/generated/TokensApi.md +0 -78
- data/docs/generated/TtlDisplayUnit.md +0 -15
- data/docs/generated/UpdateUserRequest.md +0 -22
- data/docs/generated/UserDevicesApi.md +0 -152
- data/docs/generated/UserEventStatus.md +0 -15
- data/docs/generated/UserInfo.md +0 -48
- data/docs/generated/UserMetadataField.md +0 -28
- data/docs/generated/UserMetadataFieldType.md +0 -15
- data/docs/generated/UserRecentEvent.md +0 -30
- data/docs/generated/UserResponse.md +0 -18
- data/docs/generated/UserSocialConnections.md +0 -22
- data/docs/generated/UserStatus.md +0 -15
- data/docs/generated/UsersApi.md +0 -534
- data/docs/generated/WebAuthnDevices.md +0 -34
- data/docs/generated/WebAuthnIcons.md +0 -20
- data/docs/generated/WebAuthnType.md +0 -15
- data/generate.sh +0 -31
- data/openapitools.json +0 -7
- data/passageidentity.gemspec +0 -32
- data/tests/all.rb +0 -3
- data/tests/app_test.rb +0 -15
- data/tests/auth_test.rb +0 -74
- data/tests/errors_test.rb +0 -30
- data/tests/magic_link_test.rb +0 -22
- data/tests/user_api_test.rb +0 -121
data/generate.sh
DELETED
@@ -1,31 +0,0 @@
|
|
1
|
-
# #!/bin/bash
|
2
|
-
# set -e
|
3
|
-
|
4
|
-
if [ -z "$1" ]; then
|
5
|
-
echo "Required generator file is missing."
|
6
|
-
exit 1
|
7
|
-
fi
|
8
|
-
|
9
|
-
file="$1"
|
10
|
-
|
11
|
-
npm install @openapitools/openapi-generator-cli -g
|
12
|
-
|
13
|
-
mkdir generated
|
14
|
-
|
15
|
-
openapi-generator-cli generate \
|
16
|
-
-i "$file" \
|
17
|
-
-g ruby \
|
18
|
-
-o ./generated \
|
19
|
-
--additional-properties=modelPropertyNaming=original,library=faraday
|
20
|
-
|
21
|
-
rm -rf ./docs/generated
|
22
|
-
mv ./generated/docs ./docs/generated
|
23
|
-
mv ./generated/README.md ./docs/generated
|
24
|
-
|
25
|
-
rm -rf ./lib/openapi_client
|
26
|
-
mv ./generated/lib/openapi_client ./lib
|
27
|
-
|
28
|
-
rm -rf ./lib/openapi_client.rb
|
29
|
-
mv ./generated/lib/openapi_client.rb ./lib/openapi_client.rb
|
30
|
-
|
31
|
-
rm -rf ./generated
|
data/openapitools.json
DELETED
data/passageidentity.gemspec
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
require_relative 'lib/passageidentity/version'
|
2
|
-
|
3
|
-
Gem::Specification.new do |s|
|
4
|
-
s.name = 'passageidentity'
|
5
|
-
s.version = Passage::VERSION
|
6
|
-
s.summary = 'Passage Passkey Complete SDK'
|
7
|
-
s.description =
|
8
|
-
'Passkey Complete for Ruby - Integrate into your Ruby API or service to enable a completely passwordless standalone auth solution with Passage by 1Password.'
|
9
|
-
s.authors = ['Passage by 1Password']
|
10
|
-
s.email = 'support@passage.id'
|
11
|
-
s.files = ['lib/passageidentity.rb']
|
12
|
-
s.homepage = 'http://docs.passage.id/complete'
|
13
|
-
s.license = 'MIT'
|
14
|
-
|
15
|
-
s.metadata['source_code_uri'] =
|
16
|
-
'https://github.com/passageidentity/passage-ruby'
|
17
|
-
|
18
|
-
# Specify which files should be added to the gem when it is released.
|
19
|
-
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
20
|
-
s.require_paths = ['lib']
|
21
|
-
|
22
|
-
s.files =
|
23
|
-
Dir.chdir(File.expand_path(__dir__)) do
|
24
|
-
`git ls-files -z`.split("\x0").reject do |f|
|
25
|
-
f.match(%r{^(test|spec|features)/})
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
s.add_dependency 'faraday', '>= 0.17.0', '< 2.0'
|
30
|
-
s.add_dependency 'jwt', '~> 2.3', '>= 2.3.0'
|
31
|
-
s.add_dependency 'openssl', '~> 3.0', '>= 3.0.0'
|
32
|
-
end
|
data/tests/all.rb
DELETED
data/tests/app_test.rb
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
require_relative "../lib/passageidentity/client"
|
2
|
-
require "dotenv"
|
3
|
-
require "faraday"
|
4
|
-
require "test/unit"
|
5
|
-
|
6
|
-
Dotenv.load(".env")
|
7
|
-
class TestAppAPI < Test::Unit::TestCase
|
8
|
-
PassageClient =
|
9
|
-
Passage::Client.new(app_id: ENV["APP_ID"], api_key: ENV["API_KEY"])
|
10
|
-
|
11
|
-
def test_get_app()
|
12
|
-
app = PassageClient.get_app()
|
13
|
-
assert_equal ENV["APP_ID"], app.id
|
14
|
-
end
|
15
|
-
end
|
data/tests/auth_test.rb
DELETED
@@ -1,74 +0,0 @@
|
|
1
|
-
require_relative "../lib/passageidentity/client"
|
2
|
-
require "dotenv"
|
3
|
-
require "faraday"
|
4
|
-
require "rack"
|
5
|
-
require "test/unit"
|
6
|
-
|
7
|
-
Dotenv.load(".env")
|
8
|
-
class TestAuthAPI < Test::Unit::TestCase
|
9
|
-
PassageClient =
|
10
|
-
Passage::Client.new(app_id: ENV["APP_ID"], api_key: ENV["API_KEY"])
|
11
|
-
PassageHeaderClient =
|
12
|
-
Passage::Client.new(
|
13
|
-
app_id: ENV["APP_ID"],
|
14
|
-
api_key: ENV["API_KEY"],
|
15
|
-
auth_strategy: Passage::HEADER_STRATEGY
|
16
|
-
)
|
17
|
-
|
18
|
-
def test_valid_jwt
|
19
|
-
user_id = PassageClient.auth.validate_jwt(ENV["PSG_JWT"])
|
20
|
-
assert_equal ENV["TEST_USER_ID"], user_id
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_valid_authenticate_token
|
24
|
-
user_id = PassageClient.auth.authenticate_token(ENV["PSG_JWT"])
|
25
|
-
assert_equal ENV["TEST_USER_ID"], user_id
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_invalid_authenticate_token
|
29
|
-
assert_raises Passage::PassageError do
|
30
|
-
PassageClient.auth.authenticate_token("invalid_token")
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_valid_authenticate_request_cookie
|
35
|
-
env = Rack::MockRequest.env_for("https://test.com")
|
36
|
-
env["HTTP_COOKIE"] = "psg_auth_token=#{ENV["PSG_JWT"]}"
|
37
|
-
cookie_request = Rack::Request.new(env)
|
38
|
-
user_id = PassageClient.auth.authenticate_request(cookie_request)
|
39
|
-
assert_equal ENV["TEST_USER_ID"], user_id
|
40
|
-
end
|
41
|
-
|
42
|
-
def test_invalid_authenticate_request_cookie
|
43
|
-
envBadCookie = Rack::MockRequest.env_for("https://test.com")
|
44
|
-
envBadCookie["HTTP_COOKIE"] = "psg_auth_token=invalid_token}"
|
45
|
-
bad_cookie_request = Rack::Request.new(envBadCookie)
|
46
|
-
assert_raises Passage::PassageError do
|
47
|
-
PassageClient.auth.authenticate_request(bad_cookie_request)
|
48
|
-
end
|
49
|
-
no_cookie_request = Rack::Request.new({})
|
50
|
-
assert_raises Passage::PassageError do
|
51
|
-
PassageClient.auth.authenticate_request(no_cookie_request)
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def test_valid_authenticate_request_header
|
56
|
-
headers = { "Authorization" => "Bearer #{ENV["PSG_JWT"]}" }
|
57
|
-
header_request = Faraday.new(url: "https://test.com", headers: headers)
|
58
|
-
user_id = PassageHeaderClient.auth.authenticate_request(header_request)
|
59
|
-
assert_equal ENV["TEST_USER_ID"], user_id
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_invalid_authenticate_request_header
|
63
|
-
invalid_headers = { "Authorization" => "Bearer invalid_token" }
|
64
|
-
no_header_request = Faraday.new(url: "https://test.com")
|
65
|
-
assert_raises Passage::PassageError do
|
66
|
-
PassageHeaderClient.auth.authenticate_request(no_header_request)
|
67
|
-
end
|
68
|
-
invalid_header_request =
|
69
|
-
Faraday.new(url: "https://test.com", headers: invalid_headers)
|
70
|
-
assert_raises Passage::PassageError do
|
71
|
-
PassageHeaderClient.auth.authenticate_request(no_header_request)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
data/tests/errors_test.rb
DELETED
@@ -1,30 +0,0 @@
|
|
1
|
-
require_relative "../lib/passageidentity/error"
|
2
|
-
require "test/unit"
|
3
|
-
require "net/http"
|
4
|
-
|
5
|
-
class ErrorTest < Test::Unit::TestCase
|
6
|
-
def test_initialize
|
7
|
-
body = { "error" => "some error" }
|
8
|
-
|
9
|
-
error =
|
10
|
-
Passage::PassageError.new(
|
11
|
-
message: "some message",
|
12
|
-
status_code: 400,
|
13
|
-
body: body
|
14
|
-
)
|
15
|
-
|
16
|
-
assert_equal error.message, "some message"
|
17
|
-
assert_equal error.error, "some error"
|
18
|
-
assert_equal error.status_code, 400
|
19
|
-
assert_equal error.status_text, Net::HTTPBadRequest
|
20
|
-
end
|
21
|
-
|
22
|
-
def test_initialize_message_only
|
23
|
-
error = Passage::PassageError.new(message: "some message")
|
24
|
-
|
25
|
-
assert_equal error.message, "some message"
|
26
|
-
assert_equal error.error, nil
|
27
|
-
assert_equal error.status_code, nil
|
28
|
-
assert_equal error.status_text, nil
|
29
|
-
end
|
30
|
-
end
|
data/tests/magic_link_test.rb
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
require_relative "../lib/passageidentity/client"
|
2
|
-
require "dotenv"
|
3
|
-
require "faraday"
|
4
|
-
require "test/unit"
|
5
|
-
|
6
|
-
Dotenv.load(".env")
|
7
|
-
class TestMagicLinkAPI < Test::Unit::TestCase
|
8
|
-
PassageClient =
|
9
|
-
Passage::Client.new(app_id: ENV["APP_ID"], api_key: ENV["API_KEY"])
|
10
|
-
|
11
|
-
def test_create_magic_link()
|
12
|
-
magic_link =
|
13
|
-
PassageClient.create_magic_link(
|
14
|
-
email: "chris@passage.id",
|
15
|
-
channel: Passage::EMAIL_CHANNEL,
|
16
|
-
ttl: 122
|
17
|
-
)
|
18
|
-
|
19
|
-
assert_equal 122, magic_link.ttl
|
20
|
-
assert_equal "chris@passage.id", magic_link.identifier
|
21
|
-
end
|
22
|
-
end
|
data/tests/user_api_test.rb
DELETED
@@ -1,121 +0,0 @@
|
|
1
|
-
require_relative "../lib/passageidentity/client"
|
2
|
-
require "dotenv"
|
3
|
-
require "faraday"
|
4
|
-
require "test/unit"
|
5
|
-
|
6
|
-
Dotenv.load(".env")
|
7
|
-
class TestUserAPI < Test::Unit::TestCase
|
8
|
-
PassageClient =
|
9
|
-
Passage::Client.new(app_id: ENV["APP_ID"], api_key: ENV["API_KEY"])
|
10
|
-
|
11
|
-
def setup()
|
12
|
-
$global_test_user =
|
13
|
-
PassageClient.user.create(
|
14
|
-
email: "chris+test-ruby@passage.id",
|
15
|
-
user_metadata: {
|
16
|
-
example1: "cool"
|
17
|
-
}
|
18
|
-
)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_create_delete_user()
|
22
|
-
user =
|
23
|
-
PassageClient.user.create(
|
24
|
-
email: "chris+test-create-delete@passage.id",
|
25
|
-
user_metadata: {
|
26
|
-
example1: "cool"
|
27
|
-
}
|
28
|
-
)
|
29
|
-
assert_equal "chris+test-create-delete@passage.id", user.email
|
30
|
-
assert_equal "cool", user.user_metadata[:example1]
|
31
|
-
deleted = PassageClient.user.delete(user_id: user.id)
|
32
|
-
assert_equal true, deleted
|
33
|
-
end
|
34
|
-
|
35
|
-
def test_get_user()
|
36
|
-
user = PassageClient.user.get(user_id: $global_test_user.id)
|
37
|
-
assert_equal $global_test_user.id, user.id
|
38
|
-
end
|
39
|
-
|
40
|
-
def test_get_user_by_identifier()
|
41
|
-
user = PassageClient.user.get(user_id: $global_test_user.id)
|
42
|
-
assert_equal $global_test_user.id, user.id
|
43
|
-
|
44
|
-
user_by_identifier = PassageClient.user.get_by_identifier(user_identifier: $global_test_user.email)
|
45
|
-
assert_equal $global_test_user.id, user_by_identifier.id
|
46
|
-
|
47
|
-
assert_equal user, user_by_identifier
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_get_user_by_identifier_upper_case()
|
51
|
-
user = PassageClient.user.get(user_id: $global_test_user.id)
|
52
|
-
assert_equal $global_test_user.id, user.id
|
53
|
-
|
54
|
-
user_by_identifier = PassageClient.user.get_by_identifier(user_identifier: $global_test_user.email.upcase)
|
55
|
-
assert_equal $global_test_user.id, user_by_identifier.id
|
56
|
-
|
57
|
-
assert_equal user, user_by_identifier
|
58
|
-
end
|
59
|
-
|
60
|
-
def test_get_user_by_identifier_phone()
|
61
|
-
$phone = "+15005550007"
|
62
|
-
create_user = PassageClient.user.create(
|
63
|
-
phone: $phone,
|
64
|
-
)
|
65
|
-
user = PassageClient.user.get(user_id: create_user.id)
|
66
|
-
assert_equal create_user.id, user.id
|
67
|
-
|
68
|
-
user_by_identifier = PassageClient.user.get_by_identifier(user_identifier: $phone)
|
69
|
-
assert_equal create_user.id, user_by_identifier.id
|
70
|
-
|
71
|
-
assert_equal user, user_by_identifier
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_invalid_get_user_by_identifier()
|
75
|
-
user = PassageClient.user.get(user_id: $global_test_user.id)
|
76
|
-
assert_equal $global_test_user.id, user.id
|
77
|
-
|
78
|
-
assert_raise (Passage::PassageError) {PassageClient.user.get_by_identifier(user_identifier: "error@passage.id")}
|
79
|
-
end
|
80
|
-
|
81
|
-
def test_deactivate_user()
|
82
|
-
user = PassageClient.user.deactivate(user_id: $global_test_user.id)
|
83
|
-
assert_equal $global_test_user.id, user.id
|
84
|
-
assert_equal "inactive", user.status
|
85
|
-
end
|
86
|
-
|
87
|
-
def test_activate_user()
|
88
|
-
user = PassageClient.user.activate(user_id: $global_test_user.id)
|
89
|
-
assert_equal $global_test_user.id, user.id
|
90
|
-
assert_equal "active", user.status
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_update_user()
|
94
|
-
new_email = "chris+update_test-ruby@passage.id"
|
95
|
-
user =
|
96
|
-
PassageClient.user.update(
|
97
|
-
user_id: $global_test_user.id,
|
98
|
-
email: new_email,
|
99
|
-
user_metadata: {
|
100
|
-
example1: "lame"
|
101
|
-
}
|
102
|
-
)
|
103
|
-
assert_equal $global_test_user.id, user.id
|
104
|
-
assert_equal new_email, user.email
|
105
|
-
assert_equal "lame", user.user_metadata[:example1]
|
106
|
-
end
|
107
|
-
|
108
|
-
def test_list_devices()
|
109
|
-
devices = PassageClient.user.list_devices(user_id: $global_test_user.id)
|
110
|
-
assert_equal [], devices
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_signout()
|
114
|
-
success = PassageClient.user.signout(user_id: $global_test_user.id)
|
115
|
-
assert_equal true, success
|
116
|
-
end
|
117
|
-
|
118
|
-
def teardown()
|
119
|
-
deleted = PassageClient.user.delete(user_id: $global_test_user.id)
|
120
|
-
end
|
121
|
-
end
|