ruby-letmein 0.0.0 → 0.1.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/ruby_letmein.rb +108 -0
- metadata +5 -4
- data/lib/ruby-letmein.rb +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5eb0608166279df5cc7ecc02b2c40e79cffdeeaca9b23a4dc8702bc8c23981de
|
4
|
+
data.tar.gz: 0c50f6139c6fe97f69ee286a8f0aa52b7bf5cc7e88b9baf6b54c1bd962ebce1d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f7be3fbcb0091edaecda1a01e5fe96745b257fef70d90d8096195e83b4ee413315c6e473d637d0ef861f5bb439f35f48708fac6c0bb57ff9382eaf4a848fc9f
|
7
|
+
data.tar.gz: f4dd6b9cfe90672a8e15c900ddc6f4a620bd2cb0995d5f63f08626fedbca8f66b46dc18f861772eff571de0bdd4772a5525949569d02e527ae0dbc2be82ddefb
|
data/lib/ruby_letmein.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'uri'
|
5
|
+
require 'json'
|
6
|
+
|
7
|
+
# Main class
|
8
|
+
class RubyLetmein
|
9
|
+
attr_reader :app_token, :base_url, :uri
|
10
|
+
attr_accessor :auth_token, :auth_token_expiry, :api_error
|
11
|
+
|
12
|
+
def initialize(base_url, app_token)
|
13
|
+
URI.parse(base_url)
|
14
|
+
@base_url = base_url
|
15
|
+
@app_token = app_token
|
16
|
+
end
|
17
|
+
|
18
|
+
def sign_in(email, password)
|
19
|
+
uri = URI.parse("#{base_url}/api/v1/app/session/sign_in")
|
20
|
+
header = { 'Content-Type': 'application/json', AppToken: @app_token }
|
21
|
+
|
22
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
23
|
+
http.use_ssl = true if uri.instance_of? URI::HTTPS
|
24
|
+
request = Net::HTTP::Post.new(uri.request_uri, header)
|
25
|
+
request.body = { email: email, password: password }.to_json
|
26
|
+
|
27
|
+
response = http.request(request)
|
28
|
+
return false unless success?(request, response)
|
29
|
+
|
30
|
+
define_auth_token_and_expiry!(response)
|
31
|
+
end
|
32
|
+
|
33
|
+
def sign_out
|
34
|
+
uri = URI.parse("#{base_url}/api/v1/app/session/sign_out")
|
35
|
+
header = { 'Content-Type': 'application/json', AppToken: @app_token, Authorization: "Bearer #{@auth_token}" }
|
36
|
+
|
37
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
38
|
+
http.use_ssl = true if uri.instance_of? URI::HTTPS
|
39
|
+
request = Net::HTTP::Delete.new(uri.request_uri, header)
|
40
|
+
|
41
|
+
response = http.request(request)
|
42
|
+
return false unless success?(request, response)
|
43
|
+
|
44
|
+
nullify_token_and_expiry
|
45
|
+
true
|
46
|
+
end
|
47
|
+
|
48
|
+
def signed_in?
|
49
|
+
uri = URI.parse("#{base_url}/api/v1/app/session/signed_in")
|
50
|
+
header = { 'Content-Type': 'application/json', AppToken: @app_token, Authorization: "Bearer #{@auth_token}" }
|
51
|
+
|
52
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
53
|
+
http.use_ssl = true if uri.instance_of? URI::HTTPS
|
54
|
+
request = Net::HTTP::Get.new(uri.request_uri, header)
|
55
|
+
|
56
|
+
response = http.request(request)
|
57
|
+
success?(request, response)
|
58
|
+
end
|
59
|
+
|
60
|
+
def current_user
|
61
|
+
@current_user ||= retrieve_current_user
|
62
|
+
end
|
63
|
+
|
64
|
+
def refresh_current_user
|
65
|
+
@current_user = nil
|
66
|
+
current_user
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
def retrieve_current_user
|
72
|
+
uri = URI.parse("#{base_url}/api/v1/app/session/current_user")
|
73
|
+
header = { 'Content-Type': 'application/json', AppToken: @app_token, Authorization: "Bearer #{@auth_token}" }
|
74
|
+
|
75
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
76
|
+
http.use_ssl = true if uri.instance_of? URI::HTTPS
|
77
|
+
request = Net::HTTP::Get.new(uri.request_uri, header)
|
78
|
+
|
79
|
+
response = http.request(request)
|
80
|
+
return nil unless success?(request, response)
|
81
|
+
|
82
|
+
JSON.parse(response.body)
|
83
|
+
end
|
84
|
+
|
85
|
+
def error?(request, response)
|
86
|
+
@api_error = (response.code == '200' ? nil : ApiError.new(request, response))
|
87
|
+
!@api_error.nil?
|
88
|
+
end
|
89
|
+
|
90
|
+
def success?(request, response)
|
91
|
+
!error?(request, response)
|
92
|
+
end
|
93
|
+
|
94
|
+
def define_auth_token_and_expiry!(response)
|
95
|
+
parsed_body = JSON.parse(response.body)
|
96
|
+
|
97
|
+
@auth_token = parsed_body['auth_token']
|
98
|
+
@auth_token_expiry = Time.at(parsed_body['expiry'].to_i)
|
99
|
+
true
|
100
|
+
rescue StandardError
|
101
|
+
false
|
102
|
+
end
|
103
|
+
|
104
|
+
def nullify_token_and_expiry
|
105
|
+
@auth_token = nil
|
106
|
+
@auth_token_expiry = nil
|
107
|
+
end
|
108
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-letmein
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adilson Chacon
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Client for Ruby language to authentication/autorization LetMeIn API
|
14
14
|
email:
|
@@ -16,11 +16,12 @@ executables: []
|
|
16
16
|
extensions: []
|
17
17
|
extra_rdoc_files: []
|
18
18
|
files:
|
19
|
-
- lib/
|
19
|
+
- lib/ruby_letmein.rb
|
20
20
|
homepage: https://rubygems.org/gems/ruby-letmein
|
21
21
|
licenses:
|
22
22
|
- MIT
|
23
|
-
metadata:
|
23
|
+
metadata:
|
24
|
+
rubygems_mfa_required: 'true'
|
24
25
|
post_install_message:
|
25
26
|
rdoc_options: []
|
26
27
|
require_paths:
|