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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2d344ef4afa3e545d88f2a718dfe5898112c6fdc13b84dcbcceab71eaa1a3b91
4
- data.tar.gz: 4582be4db8ef17235b61947ebb4739ca5a092b66d1f74f41da9cb349f35c9811
3
+ metadata.gz: 5eb0608166279df5cc7ecc02b2c40e79cffdeeaca9b23a4dc8702bc8c23981de
4
+ data.tar.gz: 0c50f6139c6fe97f69ee286a8f0aa52b7bf5cc7e88b9baf6b54c1bd962ebce1d
5
5
  SHA512:
6
- metadata.gz: a5ad3ab1a13ffe2b3791dcbe35abad5f5408cfe317db6c9e241b156e457f74e9183d4f02b7ee368f64d7bea5e19fe51e73865edfba3fe5b1245aaf68e01914ab
7
- data.tar.gz: 8d0f8b6fb2227af6807c6a44ba7e1e3892dc284aa78d1b652849e9eba98e4e4bc7f706a105c614e8bb52e68d02342f9d6211f9cee9903fe247116b5d9495f5d2
6
+ metadata.gz: 5f7be3fbcb0091edaecda1a01e5fe96745b257fef70d90d8096195e83b4ee413315c6e473d637d0ef861f5bb439f35f48708fac6c0bb57ff9382eaf4a848fc9f
7
+ data.tar.gz: f4dd6b9cfe90672a8e15c900ddc6f4a620bd2cb0995d5f63f08626fedbca8f66b46dc18f861772eff571de0bdd4772a5525949569d02e527ae0dbc2be82ddefb
@@ -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.0.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: 2022-12-25 00:00:00.000000000 Z
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/ruby-letmein.rb
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:
data/lib/ruby-letmein.rb DELETED
@@ -1,8 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # Main class
4
- class RubyLetmein
5
- def self.print_hello_world
6
- p 'Hello World'
7
- end
8
- end