azuread-auth 0.1.1

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.
Files changed (4) hide show
  1. checksums.yaml +7 -0
  2. data/lib/azure_ad.rb +97 -0
  3. data/test/test_azure_ad.rb +10 -0
  4. metadata +89 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: c24b15ae292247171f6bedfa92ddb078676bf7c49ace011fa5ead35c2a7e0c16
4
+ data.tar.gz: 77f6466482553d27a34d3af76ce6293ca4b45e15207e357d8cee34e8c9343428
5
+ SHA512:
6
+ metadata.gz: bd9f6ece6de06348cc541a0eb12afe3fa75c5afeeee9dfc9bb0e1204224bb1c43a5ca1cdfd1f008f6115c6d79b4fd4a9b4bc476121cfa8c44332a57fe6ec4bc3
7
+ data.tar.gz: 0bad5c6ef79ef54940334571b46e04e8a35dbd7d20c4d46243a5591b3d376626fdc1e9ca68b3c1ded866a536371dd4bab3916ef2862922b53dc918cecf527b2f
@@ -0,0 +1,97 @@
1
+ require 'jwt'
2
+
3
+ module AzureADAuth
4
+ # This is the main class responsible to evaluate the equations
5
+ class AzureAD
6
+ VERSION = '0.1.1'.freeze
7
+
8
+ # tenant = "nvsistemas.onmicrosoft.com"
9
+ # app_id = "616f5cbb-b5e8-48b8-90c0-1193606880fc"
10
+ # redirect_url = "http://localhost:3000/mykaefer_oauth"
11
+ # state = "12345"
12
+ # #client_secret = "nahpeukahsh8fi8ifier"
13
+ # client_secret = "cwdbdcej1a+4th5b3xsqj8gqe8shfo+sphkjd88vquo="
14
+ # resource = "http://localhost:3000/mykaefer_oauth"
15
+ def initialize(opts = {})
16
+ @tenant = opts[:tenant]
17
+ @app_id = opts[:app_id]
18
+ @redirect_url = opts[:redirect_url]
19
+ @state = opts[:state]
20
+ @client_secret = opts[:client_secret]
21
+ @resource = opts[:resource]
22
+ end
23
+
24
+ def authorization_url(login)
25
+ "https://login.microsoftonline.com/#{@tenant}/oauth2/authorize?client_id=#{@app_id}&response_type=code&redirect_uri=#{@redirect_url}&response_mode=query&state=#{@state}&login_hint=#{login}"
26
+ end
27
+
28
+ # PARAMS
29
+ #
30
+ # code = params[:code]
31
+ # session_state = params[:session_state]
32
+ # state = params[:state]
33
+ # POST /{tenant}/oauth2/token HTTP/1.1
34
+ # Host: https://login.microsoftonline.com
35
+ # Content-Type: application/x-www-form-urlencoded
36
+ # grant_type=authorization_code
37
+ # &client_id=2d4d11a2-f814-46a7-890a-274a72a7309e
38
+ # &code=AwABAAAAvPM1KaPlrEqdFSBzjqfTGBCmLdgfSTLEMP...
39
+ # &redirect_uri=https%3A%2F%2Flocalhost%2Fmyapp%2F
40
+ # &resource=https%3A%2F%2Fservice.contoso.com%2F
41
+ # &client_secret=p@ssw0rd
42
+ def request_access_token(opts = {})
43
+ code = opts[:code]
44
+ session_state = opts[:session_state]
45
+ state = opts[:state]
46
+
47
+ params = {
48
+ grant_type: 'authorization_code', client_id: @app_id, code: code,
49
+ redirect_uri: @redirect_url, client_secret: @client_secret,
50
+ resource: @app_id
51
+ }
52
+ token_url = "https://login.microsoftonline.com/#{@tenant}/oauth2/token"
53
+
54
+ response = Net::HTTP.post_form(URI.parse(token_url), params)
55
+
56
+ body = JSON.parse(response.body)
57
+
58
+ puts "#" * 90
59
+ ap response.code
60
+ ap body
61
+ puts "#" * 90
62
+
63
+ answer = { status: :failed, data: {} }
64
+
65
+ if response.code == '200'
66
+ access_token = body['access_token']
67
+ token_type = body['token_type']
68
+ expires_in = body['expires_in']
69
+ ext_expires_in = body['ext_expires_in']
70
+ not_before = body['not_before']
71
+ resource = body['resource']
72
+ refresh_token = body['refresh_token']
73
+ id_token = body['id_token']
74
+ jwt_token = JWT.decode(id_token, nil, false)
75
+ scope = body['scope']
76
+ puts "#" * 90
77
+ ap jwt_token
78
+ puts "#" * 90
79
+
80
+ puts "Access Token Acquired"
81
+ answer[:data] = jwt_token[0]
82
+
83
+ if not answer[:data].include?('email') and answer[:data].include?('unique_name')
84
+ answer[:data]['email'] = jwt_token[0]['unique_name']
85
+ end
86
+
87
+ if answer[:data]['email']
88
+ answer[:data]['email'] = answer[:data]['email'].downcase
89
+ answer[:status] = :success
90
+ end
91
+ else
92
+ answer[:msg] = response.body
93
+ end
94
+ return answer
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,10 @@
1
+ require 'minitest/autorun'
2
+ require 'azure_ad'
3
+
4
+ # This class test all possible equations for this gem
5
+ class TestParsec < Minitest::Test
6
+ def test_defined
7
+ assert defined?(AzureADAuth::AzureAD)
8
+ assert defined?(AzureADAuth::AzureAD::VERSION)
9
+ end
10
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: azuread-auth
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Nilton Vasques
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-05-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: jwt
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.1.0
55
+ description: AzureAD Authentication
56
+ email:
57
+ - nilton.vasques@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/azure_ad.rb
63
+ - test/test_azure_ad.rb
64
+ homepage: https://github.com/niltonvasques/azuread-auth
65
+ licenses:
66
+ - mit
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubyforge_project:
84
+ rubygems_version: 2.7.6
85
+ signing_key:
86
+ specification_version: 4
87
+ summary: A gem to authenticate against AzureAD
88
+ test_files:
89
+ - test/test_azure_ad.rb