microsoft_kiota_authentication_oauth 0.0.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/CODEOWNERS +1 -0
- data/.github/dependabot.yml +12 -0
- data/.github/workflows/code-ql.yml +76 -0
- data/.github/workflows/conflicting-pr-label.yml +34 -0
- data/.github/workflows/projectsbot.yml +81 -0
- data/.github/workflows/release.yml +45 -0
- data/.github/workflows/ruby.yml +34 -0
- data/.gitignore +58 -0
- data/CHANGELOG.md +18 -0
- data/CODE_OF_CONDUCT.md +9 -0
- data/Gemfile +6 -0
- data/LICENSE +21 -0
- data/README.md +53 -0
- data/Rakefile +9 -0
- data/SECURITY.md +41 -0
- data/SUPPORT.md +25 -0
- data/lib/microsoft_kiota_authentication_oauth/contexts/authorization_code_context.rb +87 -0
- data/lib/microsoft_kiota_authentication_oauth/contexts/client_credential_context.rb +59 -0
- data/lib/microsoft_kiota_authentication_oauth/contexts/oauth_context.rb +30 -0
- data/lib/microsoft_kiota_authentication_oauth/contexts/oauth_custom_flow.rb +27 -0
- data/lib/microsoft_kiota_authentication_oauth/contexts/on_behalf_of_context.rb +72 -0
- data/lib/microsoft_kiota_authentication_oauth/extensions/oauth2_ext.rb +22 -0
- data/lib/microsoft_kiota_authentication_oauth/oauth_access_token_provider.rb +81 -0
- data/lib/microsoft_kiota_authentication_oauth/oauth_authentication_provider.rb +10 -0
- data/lib/microsoft_kiota_authentication_oauth/version.rb +5 -0
- data/lib/microsoft_kiota_authentication_oauth.rb +13 -4
- data/microsoft_kiota_authentication_oauth.gemspec +38 -0
- metadata +118 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1527ce960c8fd9e79baa76159ad270a878c49c2bb9d09975cdafc360d4d8cda0
|
4
|
+
data.tar.gz: 930b0578b7ab8a9889b48cc511e2e450b6cfcc4eca61c38c294fab741a91baa1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a2b94d7d00cf56c082585a1280a2fe2e13c2079f6706ff06509e5f23d106112c536a7536f15fba5d0bd515efad375bb5c224f75d37303b68ec8de99066eba14
|
7
|
+
data.tar.gz: 2d34b6075c37108cb3fbf008e7447678513f7f2bea644911efaa36cfd1fb763c4f119e76d5a4be39d13afdfed3ba0928164b3216f0fd49af748713a8f0191acd
|
data/.github/CODEOWNERS
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
* @andrueastman @baywet @darrelmiller @zengin @MichaelMainer @ddyett @peombwa @nikithauc @ramsessanchez @calebkiage @Ndiritu @rkodev @gavinbarron
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# For most projects, this workflow file will not need changing; you simply need
|
2
|
+
# to commit it to your repository.
|
3
|
+
#
|
4
|
+
# You may wish to alter this file to override the set of languages analyzed,
|
5
|
+
# or to provide custom queries or build logic.
|
6
|
+
#
|
7
|
+
# ******** NOTE ********
|
8
|
+
# We have attempted to detect the languages in your repository. Please check
|
9
|
+
# the `language` matrix defined below to confirm you have the correct set of
|
10
|
+
# supported CodeQL languages.
|
11
|
+
#
|
12
|
+
name: "CodeQL"
|
13
|
+
|
14
|
+
on:
|
15
|
+
push:
|
16
|
+
branches: [ "master", main ]
|
17
|
+
pull_request:
|
18
|
+
# The branches below must be a subset of the branches above
|
19
|
+
branches: [ "master" ]
|
20
|
+
schedule:
|
21
|
+
- cron: '41 2 * * 0'
|
22
|
+
|
23
|
+
jobs:
|
24
|
+
analyze:
|
25
|
+
name: Analyze
|
26
|
+
runs-on: ubuntu-latest
|
27
|
+
permissions:
|
28
|
+
actions: read
|
29
|
+
contents: read
|
30
|
+
security-events: write
|
31
|
+
|
32
|
+
strategy:
|
33
|
+
fail-fast: false
|
34
|
+
matrix:
|
35
|
+
language: [ 'ruby' ]
|
36
|
+
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
37
|
+
# Use only 'java' to analyze code written in Java, Kotlin or both
|
38
|
+
# Use only 'javascript' to analyze code written in JavaScript, TypeScript or both
|
39
|
+
# Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support
|
40
|
+
|
41
|
+
steps:
|
42
|
+
- name: Checkout repository
|
43
|
+
uses: actions/checkout@v3
|
44
|
+
|
45
|
+
# Initializes the CodeQL tools for scanning.
|
46
|
+
- name: Initialize CodeQL
|
47
|
+
uses: github/codeql-action/init@v2
|
48
|
+
with:
|
49
|
+
languages: ${{ matrix.language }}
|
50
|
+
# If you wish to specify custom queries, you can do so here or in a config file.
|
51
|
+
# By default, queries listed here will override any specified in a config file.
|
52
|
+
# Prefix the list here with "+" to use these queries and those in the config file.
|
53
|
+
|
54
|
+
# Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs
|
55
|
+
# queries: security-extended,security-and-quality
|
56
|
+
|
57
|
+
|
58
|
+
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
59
|
+
# If this step fails, then you should remove it and run the build manually (see below)
|
60
|
+
- name: Autobuild
|
61
|
+
uses: github/codeql-action/autobuild@v2
|
62
|
+
|
63
|
+
# ℹ️ Command-line programs to run using the OS shell.
|
64
|
+
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
65
|
+
|
66
|
+
# If the Autobuild fails above, remove it and uncomment the following three lines.
|
67
|
+
# modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance.
|
68
|
+
|
69
|
+
# - run: |
|
70
|
+
# echo "Run, Build Application using script"
|
71
|
+
# ./location_of_script_within_repo/buildscript.sh
|
72
|
+
|
73
|
+
- name: Perform CodeQL Analysis
|
74
|
+
uses: github/codeql-action/analyze@v2
|
75
|
+
with:
|
76
|
+
category: "/language:${{matrix.language}}"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# This is a basic workflow to help you get started with Actions
|
2
|
+
|
3
|
+
name: PullRequestConflicting
|
4
|
+
|
5
|
+
# Controls when the action will run. Triggers the workflow on push or pull request
|
6
|
+
# events but only for the master branch
|
7
|
+
on:
|
8
|
+
push:
|
9
|
+
branches: [ main ]
|
10
|
+
pull_request:
|
11
|
+
types: [synchronize]
|
12
|
+
branches: [ main ]
|
13
|
+
|
14
|
+
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
|
15
|
+
jobs:
|
16
|
+
# This workflow contains a single job called "build"
|
17
|
+
build:
|
18
|
+
# The type of runner that the job will run on
|
19
|
+
runs-on: ubuntu-latest
|
20
|
+
|
21
|
+
# Steps represent a sequence of tasks that will be executed as part of the job
|
22
|
+
steps:
|
23
|
+
- name: check if prs are dirty
|
24
|
+
uses: eps1lon/actions-label-merge-conflict@releases/2.x
|
25
|
+
if: env.LABELING_TOKEN != '' && env.LABELING_TOKEN != null
|
26
|
+
id: check
|
27
|
+
with:
|
28
|
+
dirtyLabel: "conflicting"
|
29
|
+
repoToken: "${{ secrets.GITHUB_TOKEN }}"
|
30
|
+
continueOnMissingPermissions: true
|
31
|
+
commentOnDirty: 'This pull request has conflicting changes, the author must resolve the conflicts before this pull request can be merged.'
|
32
|
+
commentOnClean: 'Conflicts have been resolved. A maintainer will take a look shortly.'
|
33
|
+
env:
|
34
|
+
LABELING_TOKEN: ${{secrets.GITHUB_TOKEN }}
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# This workflow is used to add new issues to GitHub Projects (Beta)
|
2
|
+
|
3
|
+
name: Add PR to project
|
4
|
+
on:
|
5
|
+
issues:
|
6
|
+
types: [opened]
|
7
|
+
jobs:
|
8
|
+
track_issue:
|
9
|
+
runs-on: ubuntu-latest
|
10
|
+
steps:
|
11
|
+
- name: Generate token
|
12
|
+
id: generate_token
|
13
|
+
uses: tibdex/github-app-token@021a2405c7f990db57f5eae5397423dcc554159c
|
14
|
+
with:
|
15
|
+
app_id: ${{ secrets.GRAPHBOT_APP_ID }}
|
16
|
+
private_key: ${{ secrets.GRAPHBOT_APP_PEM }}
|
17
|
+
|
18
|
+
- name: Get project data
|
19
|
+
env:
|
20
|
+
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
|
21
|
+
ORGANIZATION: microsoftgraph
|
22
|
+
PROJECT_NUMBER: 38
|
23
|
+
run: |
|
24
|
+
gh api graphql -f query='
|
25
|
+
query($org: String!, $number: Int!) {
|
26
|
+
organization(login: $org){
|
27
|
+
projectNext(number: $number) {
|
28
|
+
id
|
29
|
+
fields(first:20) {
|
30
|
+
nodes {
|
31
|
+
id
|
32
|
+
name
|
33
|
+
settings
|
34
|
+
}
|
35
|
+
}
|
36
|
+
}
|
37
|
+
}
|
38
|
+
}' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json
|
39
|
+
|
40
|
+
echo 'PROJECT_ID='$(jq '.data.organization.projectNext.id' project_data.json) >> $GITHUB_ENV
|
41
|
+
echo 'STATUS_FIELD_ID='$(jq '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") | .id' project_data.json) >> $GITHUB_ENV
|
42
|
+
echo 'TRIAGE_OPTION_ID='$(jq '.data.organization.projectNext.fields.nodes[] | select(.name== "Status") |.settings | fromjson.options[] | select(.name=="Needs Triage 🔍") |.id' project_data.json) >> $GITHUB_ENV
|
43
|
+
|
44
|
+
- name: Add Issue to project
|
45
|
+
env:
|
46
|
+
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
|
47
|
+
ISSUE_ID: ${{ github.event.issue.node_id }}
|
48
|
+
run: |
|
49
|
+
item_id="$( gh api graphql -f query='
|
50
|
+
mutation($project:ID!, $issue:ID!) {
|
51
|
+
addProjectNextItem(input: {projectId: $project, contentId: $issue}) {
|
52
|
+
projectNextItem {
|
53
|
+
id
|
54
|
+
}
|
55
|
+
}
|
56
|
+
}' -f project=$PROJECT_ID -f issue=$ISSUE_ID --jq '.data.addProjectNextItem.projectNextItem.id')"
|
57
|
+
|
58
|
+
echo 'ITEM_ID='$item_id >> $GITHUB_ENV
|
59
|
+
|
60
|
+
- name: Set Triage
|
61
|
+
env:
|
62
|
+
GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}
|
63
|
+
run: |
|
64
|
+
gh api graphql -f query='
|
65
|
+
mutation (
|
66
|
+
$project: ID!
|
67
|
+
$item: ID!
|
68
|
+
$status_field: ID!
|
69
|
+
$status_value: String!
|
70
|
+
) {
|
71
|
+
set_status: updateProjectNextItemField(input: {
|
72
|
+
projectId: $project
|
73
|
+
itemId: $item
|
74
|
+
fieldId: $status_field
|
75
|
+
value: $status_value
|
76
|
+
}) {
|
77
|
+
projectNextItem {
|
78
|
+
id
|
79
|
+
}
|
80
|
+
}
|
81
|
+
}' -f project=$PROJECT_ID -f item=$ITEM_ID -f status_field=$STATUS_FIELD_ID -f status_value=${{ env.TRIAGE_OPTION_ID }} --silent
|
@@ -0,0 +1,45 @@
|
|
1
|
+
name: Git Release
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
tags:
|
6
|
+
- "v[0-9]+.[0-9]+.[0-9]+"
|
7
|
+
workflow_dispatch:
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
Git_Release:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v3
|
14
|
+
- name: Github Release
|
15
|
+
uses: anton-yurchenko/git-release@v5.0
|
16
|
+
env:
|
17
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN}}
|
18
|
+
DRAFT_RELEASE: "false"
|
19
|
+
PRE_RELEASE: "false"
|
20
|
+
CHANGELOG_FILE: "CHANGELOG.md"
|
21
|
+
ALLOW_EMPTY_CHANGELOG: "true"
|
22
|
+
|
23
|
+
deploy_prod:
|
24
|
+
environment:
|
25
|
+
name: production_feeds
|
26
|
+
runs-on: ubuntu-latest
|
27
|
+
steps:
|
28
|
+
- uses: actions/checkout@v3
|
29
|
+
- uses: ruby/setup-ruby@v1
|
30
|
+
with:
|
31
|
+
ruby-version: '3.1'
|
32
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
33
|
+
bundler: 'latest'
|
34
|
+
cache-version: 1
|
35
|
+
- run: bundle exec rake
|
36
|
+
- name: Publish to RubyGems
|
37
|
+
run: |
|
38
|
+
mkdir -p $HOME/.gem
|
39
|
+
touch $HOME/.gem/credentials
|
40
|
+
chmod 0600 $HOME/.gem/credentials
|
41
|
+
printf -- "---\n:rubygems_api_key: ${GEM_HOST_API_KEY}\n" > $HOME/.gem/credentials
|
42
|
+
gem build *.gemspec
|
43
|
+
gem push *.gem
|
44
|
+
env:
|
45
|
+
GEM_HOST_API_KEY: "${{secrets.RUBYGEMS_AUTH_TOKEN}}"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
name: Ruby
|
2
|
+
|
3
|
+
on:
|
4
|
+
workflow_dispatch:
|
5
|
+
push:
|
6
|
+
branches: [ main ]
|
7
|
+
pull_request:
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
build:
|
11
|
+
strategy:
|
12
|
+
fail-fast: false
|
13
|
+
matrix:
|
14
|
+
os: [ubuntu-latest, macos-latest]
|
15
|
+
ruby-version: ['2.7', '3.0', '3.1', head, jruby, jruby-head, truffleruby, truffleruby-head]
|
16
|
+
runs-on: ${{ matrix.os }}
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v3
|
19
|
+
- uses: ruby/setup-ruby@v1
|
20
|
+
with:
|
21
|
+
ruby-version: ${{ matrix.ruby-version }}
|
22
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
23
|
+
bundler: 'latest'
|
24
|
+
cache-version: 1
|
25
|
+
- name: Run tests
|
26
|
+
run: bundle exec rake
|
27
|
+
- name: Upload artifacts for ruby version 3 and ubuntu
|
28
|
+
if: ${{ matrix.os == 'ubuntu-latest' && matrix.ruby-version == '3.1'}}
|
29
|
+
uses: actions/upload-artifact@v3
|
30
|
+
with:
|
31
|
+
name: drop
|
32
|
+
path: |
|
33
|
+
./Gemfile.lock
|
34
|
+
./README.md
|
data/.gitignore
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
# Used by dotenv library to load environment variables.
|
14
|
+
# .env
|
15
|
+
|
16
|
+
# Ignore Byebug command history file.
|
17
|
+
.byebug_history
|
18
|
+
|
19
|
+
## Specific to RubyMotion:
|
20
|
+
.dat*
|
21
|
+
.repl_history
|
22
|
+
build/
|
23
|
+
*.bridgesupport
|
24
|
+
build-iPhoneOS/
|
25
|
+
build-iPhoneSimulator/
|
26
|
+
|
27
|
+
## Specific to RubyMotion (use of CocoaPods):
|
28
|
+
#
|
29
|
+
# We recommend against adding the Pods directory to your .gitignore. However
|
30
|
+
# you should judge for yourself, the pros and cons are mentioned at:
|
31
|
+
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
32
|
+
#
|
33
|
+
# vendor/Pods/
|
34
|
+
|
35
|
+
## Documentation cache and generated files:
|
36
|
+
/.yardoc/
|
37
|
+
/_yardoc/
|
38
|
+
/doc/
|
39
|
+
/rdoc/
|
40
|
+
|
41
|
+
## Environment normalization:
|
42
|
+
/.bundle/
|
43
|
+
/vendor/bundle
|
44
|
+
/lib/bundler/man/
|
45
|
+
|
46
|
+
# for a library or gem, you might want to ignore these files since the code is
|
47
|
+
# intended to run in multiple environments; otherwise, check them in:
|
48
|
+
Gemfile.lock
|
49
|
+
.ruby-version
|
50
|
+
.ruby-gemset
|
51
|
+
|
52
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
53
|
+
.rvmrc
|
54
|
+
|
55
|
+
# Used by RuboCop. Remote config files pulled in from inherit_from directive.
|
56
|
+
# .rubocop-https?--*
|
57
|
+
|
58
|
+
.rspec_status
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## [Unreleased]
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
### Changed
|
13
|
+
|
14
|
+
## [0.5.0] - 2022-12-30
|
15
|
+
|
16
|
+
### Added
|
17
|
+
|
18
|
+
- Initial public release of the package.
|
data/CODE_OF_CONDUCT.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
# Microsoft Open Source Code of Conduct
|
2
|
+
|
3
|
+
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
|
4
|
+
|
5
|
+
Resources:
|
6
|
+
|
7
|
+
- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
|
8
|
+
- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
|
9
|
+
- Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
|
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) Microsoft Corporation.
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE
|
data/README.md
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# Kiota OAuth authentication provider library for Ruby
|
2
|
+
|
3
|
+
![Ruby](https://github.com/microsoft/kiota-authentication-oauth-ruby/actions/workflows/ruby.yml/badge.svg)
|
4
|
+
|
5
|
+
The Kiota OAuth authentication provider library for Ruby is the authentication provider implementation with [OAuth2](https://rubygems.org/gems/oauth2).
|
6
|
+
|
7
|
+
A [Kiota](https://github.com/microsoft/kiota) generated project will need a reference to a authentication provider library to authenticate HTTP requests to an API endpoint.
|
8
|
+
|
9
|
+
Read more about Kiota [here](https://github.com/microsoft/kiota/blob/main/README.md).
|
10
|
+
|
11
|
+
## Using the OAuth library
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem "microsoft_kiota_authentication_oauth", "0.5.0"
|
19
|
+
```
|
20
|
+
|
21
|
+
And then execute:
|
22
|
+
|
23
|
+
```shell
|
24
|
+
bundle install
|
25
|
+
```
|
26
|
+
|
27
|
+
Or install it yourself as:
|
28
|
+
|
29
|
+
```shell
|
30
|
+
gem install microsoft_kiota_authentication_oauth --version "0.5.0"
|
31
|
+
```
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
This project welcomes contributions and suggestions. Most contributions require you to agree to a
|
36
|
+
Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
|
37
|
+
the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
|
38
|
+
|
39
|
+
When you submit a pull request, a CLA bot will automatically determine whether you need to provide
|
40
|
+
a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
|
41
|
+
provided by the bot. You will only need to do this once across all repos using our CLA.
|
42
|
+
|
43
|
+
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
|
44
|
+
For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
|
45
|
+
contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
|
46
|
+
|
47
|
+
## Trademarks
|
48
|
+
|
49
|
+
This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft
|
50
|
+
trademarks or logos is subject to and must follow
|
51
|
+
[Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).
|
52
|
+
Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
|
53
|
+
Any use of third-party trademarks or logos are subject to those third-party's policies.
|
data/Rakefile
ADDED
data/SECURITY.md
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->
|
2
|
+
|
3
|
+
## Security
|
4
|
+
|
5
|
+
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
|
6
|
+
|
7
|
+
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
|
8
|
+
|
9
|
+
## Reporting Security Issues
|
10
|
+
|
11
|
+
**Please do not report security vulnerabilities through public GitHub issues.**
|
12
|
+
|
13
|
+
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
|
14
|
+
|
15
|
+
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
|
16
|
+
|
17
|
+
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
|
18
|
+
|
19
|
+
Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
|
20
|
+
|
21
|
+
* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
|
22
|
+
* Full paths of source file(s) related to the manifestation of the issue
|
23
|
+
* The location of the affected source code (tag/branch/commit or direct URL)
|
24
|
+
* Any special configuration required to reproduce the issue
|
25
|
+
* Step-by-step instructions to reproduce the issue
|
26
|
+
* Proof-of-concept or exploit code (if possible)
|
27
|
+
* Impact of the issue, including how an attacker might exploit the issue
|
28
|
+
|
29
|
+
This information will help us triage your report more quickly.
|
30
|
+
|
31
|
+
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
|
32
|
+
|
33
|
+
## Preferred Languages
|
34
|
+
|
35
|
+
We prefer all communications to be in English.
|
36
|
+
|
37
|
+
## Policy
|
38
|
+
|
39
|
+
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
|
40
|
+
|
41
|
+
<!-- END MICROSOFT SECURITY.MD BLOCK -->
|
data/SUPPORT.md
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# TODO: The maintainer of this repo has not yet edited this file
|
2
|
+
|
3
|
+
**REPO OWNER**: Do you want Customer Service & Support (CSS) support for this product/project?
|
4
|
+
|
5
|
+
- **No CSS support:** Fill out this template with information about how to file issues and get help.
|
6
|
+
- **Yes CSS support:** Fill out an intake form at [aka.ms/onboardsupport](https://aka.ms/onboardsupport). CSS will work with/help you to determine next steps.
|
7
|
+
- **Not sure?** Fill out an intake as though the answer were "Yes". CSS will help you decide.
|
8
|
+
|
9
|
+
*Then remove this first heading from this SUPPORT.MD file before publishing your repo.*
|
10
|
+
|
11
|
+
# Support
|
12
|
+
|
13
|
+
## How to file issues and get help
|
14
|
+
|
15
|
+
This project uses GitHub Issues to track bugs and feature requests. Please search the existing
|
16
|
+
issues before filing new issues to avoid duplicates. For new issues, file your bug or
|
17
|
+
feature request as a new Issue.
|
18
|
+
|
19
|
+
For help and questions about using this project, please **REPO MAINTAINER: INSERT INSTRUCTIONS HERE
|
20
|
+
FOR HOW TO ENGAGE REPO OWNERS OR COMMUNITY FOR HELP. COULD BE A STACK OVERFLOW TAG OR OTHER
|
21
|
+
CHANNEL. WHERE WILL YOU HELP PEOPLE?**.
|
22
|
+
|
23
|
+
## Microsoft Support Policy
|
24
|
+
|
25
|
+
Support for this **PROJECT or PRODUCT** is limited to the resources listed above.
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oauth2'
|
4
|
+
require_relative './oauth_context'
|
5
|
+
|
6
|
+
module MicrosoftKiotaAuthenticationOAuth
|
7
|
+
# Token request context class for the authorization code grant type.
|
8
|
+
class AuthorizationCodeContext < MicrosoftKiotaAuthenticationOAuth::OAuthContext
|
9
|
+
attr_reader :grant_type, :redirect_uri, :additional_params,
|
10
|
+
:tenant_id, :client_id, :client_secret, :auth_code, :oauth_provider
|
11
|
+
attr_writer :scopes
|
12
|
+
|
13
|
+
# This is the initializer for AuthorizationCodeContext, the token request context when
|
14
|
+
# using the authorization code grant flow.
|
15
|
+
# :params
|
16
|
+
# tenant_id: a string containing the tenant id
|
17
|
+
# client_id: a string containing the client id
|
18
|
+
# client_secret: a string containing the client secret
|
19
|
+
# redirect_uri: a string containing redirect_uri
|
20
|
+
# auth_code: a string containting the auth code; default is nil, can be updated post-initialization
|
21
|
+
def initialize(tenant_id, client_id, client_secret, redirect_uri, auth_code = nil)
|
22
|
+
raise StandardError, 'redirect_uri cannot be nil/empty' if redirect_uri.nil? || redirect_uri.empty?
|
23
|
+
|
24
|
+
@tenant_id = tenant_id
|
25
|
+
@client_id = client_id
|
26
|
+
@client_secret = client_secret
|
27
|
+
@auth_code = auth_code
|
28
|
+
@redirect_uri = redirect_uri
|
29
|
+
@scopes = nil
|
30
|
+
@oauth_provider = nil
|
31
|
+
@grant_type = 'authorization code'
|
32
|
+
|
33
|
+
if @tenant_id.nil? || @client_id.nil? || @client_secret.nil? || @tenant_id.empty? || @client_id.empty? || @client_secret.empty?
|
34
|
+
raise StandardError, 'tenant_id, client_id, and client_secret cannot be empty'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# setter for auth_code
|
39
|
+
def auth_code=(code)
|
40
|
+
raise StandardError, 'auth_code cannot be empty/nil.' if code.nil? || code.empty?
|
41
|
+
|
42
|
+
@auth_code = code
|
43
|
+
end
|
44
|
+
|
45
|
+
# This function generates an authorize URL for obtaining the auth code.
|
46
|
+
# :params
|
47
|
+
# scopes: an array of stings, where each string is a scope
|
48
|
+
# additional_params: hash of symbols to string values, ie { response_mode: 'fragment', prompt: 'login' }
|
49
|
+
# default is empty hash
|
50
|
+
def generate_authorize_url(scopes, additional_params = {})
|
51
|
+
@additional_params = additional_params
|
52
|
+
|
53
|
+
self.initialize_scopes(scopes)
|
54
|
+
self.initialize_oauth_provider
|
55
|
+
|
56
|
+
parameters = { scope: @scopes, redirect_uri: @redirect_uri, access_type: 'offline', prompt: 'consent'}
|
57
|
+
parameters = parameters.merge(additional_params)
|
58
|
+
@oauth_provider.auth_code.authorize_url(parameters)
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_token
|
62
|
+
@oauth_provider.auth_code.get_token(@auth_code, redirect_uri: @redirect_uri)
|
63
|
+
end
|
64
|
+
|
65
|
+
def initialize_oauth_provider
|
66
|
+
@oauth_provider = OAuth2::Client.new(@client_id, @client_secret,
|
67
|
+
site: 'https://login.microsoftonline.com',
|
68
|
+
authorize_url: "/#{@tenant_id}/oauth2/v2.0/authorize",
|
69
|
+
token_url: "/#{@tenant_id}/oauth2/v2.0/token")
|
70
|
+
end
|
71
|
+
|
72
|
+
def initialize_scopes(scopes)
|
73
|
+
scope_str = ''
|
74
|
+
scopes.each { |scope| scope_str += scope + ' '}
|
75
|
+
raise StandardError, 'scopes cannot be empty/nil.' if scope_str.empty?
|
76
|
+
|
77
|
+
scope_str = 'offline_access ' + scope_str
|
78
|
+
|
79
|
+
@scopes = scope_str
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
attr_writer :grant_type, :redirect_uri, :additional_params,
|
85
|
+
:tenant_id, :client_id, :client_secret, :oauth_provider
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oauth2'
|
4
|
+
require_relative './oauth_context'
|
5
|
+
|
6
|
+
module MicrosoftKiotaAuthenticationOAuth
|
7
|
+
# Token request context class for the client credential grant type.
|
8
|
+
class ClientCredentialContext < MicrosoftKiotaAuthenticationOAuth::OAuthContext
|
9
|
+
attr_reader :grant_type, :additional_params, :tenant_id, :client_id, :client_secret, :oauth_provider
|
10
|
+
attr_writer :scopes
|
11
|
+
|
12
|
+
# This is the initializer for ClientCredentialContext, the token request context when
|
13
|
+
# using the client credential grant flow.
|
14
|
+
# :params
|
15
|
+
# tenant_id: a string containing the tenant id
|
16
|
+
# client_id: a string containing the client id
|
17
|
+
# client_secret: a string containing the client secret
|
18
|
+
# additional_params: hash of symbols to string values, ie { response_mode: 'fragment', prompt: 'login' }
|
19
|
+
# default is empty hash
|
20
|
+
def initialize(tenant_id, client_id, client_secret, additional_params = {})
|
21
|
+
@tenant_id = tenant_id
|
22
|
+
@client_id = client_id
|
23
|
+
@client_secret = client_secret
|
24
|
+
@additional_params = additional_params
|
25
|
+
@scopes = nil
|
26
|
+
@oauth_provider = nil
|
27
|
+
@grant_type = 'client credential'
|
28
|
+
|
29
|
+
|
30
|
+
if @tenant_id.nil? || @client_id.nil? || @client_secret.nil? || @tenant_id.empty? || @client_id.empty? || @client_secret.empty?
|
31
|
+
raise StandardError, 'tenant_id, client_id and client_secret cannot be empty'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_token
|
36
|
+
@oauth_provider.client_credentials.get_token({ scope: @scopes })
|
37
|
+
end
|
38
|
+
|
39
|
+
def initialize_oauth_provider
|
40
|
+
@oauth_provider = OAuth2::Client.new(@client_id, @client_secret,
|
41
|
+
site: 'https://login.microsoftonline.com',
|
42
|
+
authorize_url: "/#{@tenant_id}/oauth2/v2.0/authorize",
|
43
|
+
token_url: "/#{@tenant_id}/oauth2/v2.0/token")
|
44
|
+
end
|
45
|
+
|
46
|
+
# Function to initialize the scope for the client credential context object.
|
47
|
+
# This function forces to default since gradual consent is not supported
|
48
|
+
# for this flow.
|
49
|
+
def initialize_scopes(scopes = [])
|
50
|
+
scope_str = 'https://graph.microsoft.com/.default'
|
51
|
+
@scopes = scope_str
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
attr_writer :grant_type, :additional_params, :tenant_id, :client_id, :client_secret, :oauth_provider
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oauth2'
|
4
|
+
require_relative './oauth_custom_flow'
|
5
|
+
|
6
|
+
module MicrosoftKiotaAuthenticationOAuth
|
7
|
+
# Base class for token request contexs.
|
8
|
+
class OAuthContext
|
9
|
+
attr_accessor :scopes
|
10
|
+
attr_reader :oauth_provider
|
11
|
+
include MicrosoftKiotaAuthenticationOAuth::OAuthCustomFlow
|
12
|
+
|
13
|
+
def get_token
|
14
|
+
OAuthCustomFlow.get_token
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize_scopes(scopes = [])
|
18
|
+
@scopes = OAuthCustomFlow.get_scopes
|
19
|
+
end
|
20
|
+
|
21
|
+
def initialize_oauth_provider
|
22
|
+
@oauth_provider = OAuthCustomFlow.get_oauth_provider
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
attr_writer :oauth_provider
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oauth2'
|
4
|
+
|
5
|
+
module MicrosoftKiotaAuthenticationOAuth
|
6
|
+
# Module that can be optionally implemented for supporting custom token grant flows.
|
7
|
+
# To use a cutsom token grant flow, implement the functions below and
|
8
|
+
# use MicrosoftKiotaAuthenticationOAuth::OAuthContext.new as your token_request_context
|
9
|
+
# object for the use by the MicrosoftKiotaAuthenticationOAuth::OAuthAccessTokenProvider
|
10
|
+
module OAuthCustomFlow
|
11
|
+
# Function that returns an oauth client using the oauth2 gem
|
12
|
+
def self.get_oauth_provider
|
13
|
+
raise NotImplementedError.new
|
14
|
+
end
|
15
|
+
|
16
|
+
# Function that returns a space seperated string of scopes, beginning with
|
17
|
+
# the offline_access scope if relevant
|
18
|
+
def self.get_scopes
|
19
|
+
raise NotImplementedError.new
|
20
|
+
end
|
21
|
+
|
22
|
+
# Function that returns the access token
|
23
|
+
def self.get_token
|
24
|
+
raise NotImplementedError.new
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oauth2'
|
4
|
+
require_relative './oauth_context'
|
5
|
+
|
6
|
+
module MicrosoftKiotaAuthenticationOAuth
|
7
|
+
# Token request context class for the on behlaf of grant type.
|
8
|
+
class OnBehalfOfContext < MicrosoftKiotaAuthenticationOAuth::OAuthContext
|
9
|
+
attr_reader :grant_type, :additional_params, :tenant_id, :client_id, :client_secret, :oauth_provider
|
10
|
+
attr_writer :scopes
|
11
|
+
|
12
|
+
# This is the initializer for OnBehalfOfContext, the token request context when
|
13
|
+
# using the client credential grant flow.
|
14
|
+
# :params
|
15
|
+
# tenant_id: a string containing the tenant id
|
16
|
+
# client_id: a string containing the client id
|
17
|
+
# client_secret: a string containing the client secret
|
18
|
+
# assertion: string containing assertion (access token used in the request)
|
19
|
+
# additional_params: hash of symbols to string values, ie { response_mode: 'fragment', prompt: 'login' }
|
20
|
+
# default is empty hash
|
21
|
+
def initialize(tenant_id, client_id, client_secret, assertion, additional_params = {})
|
22
|
+
raise StandardError, 'assertion cannot be empty' if assertion.nil? || assertion.empty?
|
23
|
+
|
24
|
+
@tenant_id = tenant_id
|
25
|
+
@client_id = client_id
|
26
|
+
@client_secret = client_secret
|
27
|
+
@assertion = assertion
|
28
|
+
@additional_params = additional_params
|
29
|
+
@scopes = nil
|
30
|
+
@oauth_provider = nil
|
31
|
+
@grant_type = 'urn:ietf:params:Oauth:grant-type:jwt-bearer'
|
32
|
+
|
33
|
+
if @tenant_id.nil? || @client_id.nil? || @client_secret.nil? || @client_secret.empty? || @tenant_id.empty? || @client_id.empty?
|
34
|
+
raise StandardError, 'tenant_id, client_secret, and client_id cannot be empty'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_token
|
39
|
+
params = {
|
40
|
+
grant_type: @grant_type,
|
41
|
+
assertion: @assertion,
|
42
|
+
scope: @scopes,
|
43
|
+
requested_token_use: 'on_behalf_of'
|
44
|
+
}
|
45
|
+
@oauth_provider.on_behalf_of.get_token(params)
|
46
|
+
end
|
47
|
+
|
48
|
+
def initialize_oauth_provider
|
49
|
+
@oauth_provider = OAuth2::Client.new(@client_id, @client_secret,
|
50
|
+
site: 'https://login.microsoftonline.com',
|
51
|
+
authorize_url: "/#{@tenant_id}/oauth2/v2.0/authorize",
|
52
|
+
token_url: "/#{@tenant_id}/oauth2/v2.0/token")
|
53
|
+
end
|
54
|
+
|
55
|
+
def initialize_scopes(scopes)
|
56
|
+
scope_str = ''
|
57
|
+
scopes.each { |scope| scope_str += scope + ' '}
|
58
|
+
|
59
|
+
raise StandardError, 'scopes cannot be empty/nil.' if scope_str.empty?
|
60
|
+
|
61
|
+
scope_str = 'offline_access ' + scope_str
|
62
|
+
|
63
|
+
@scopes = scope_str
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
attr_writer :grant_type, :additional_params, :tenant_id, :client_id,
|
69
|
+
:client_secret, :oauth_provider
|
70
|
+
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oauth2'
|
4
|
+
|
5
|
+
# Extension of Oauth2 Library to Include On Behalf Of Grant Type
|
6
|
+
module OAuth2
|
7
|
+
module Strategy
|
8
|
+
class OnBehalfOf < Base
|
9
|
+
def get_token(params, response_opts = {})
|
10
|
+
@client.get_token(params, response_opts)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
module OAuth2
|
17
|
+
class Client
|
18
|
+
def on_behalf_of
|
19
|
+
@on_behalf_of ||= OAuth2::Strategy::OnBehalfOf.new(self)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'microsoft_kiota_abstractions'
|
4
|
+
require 'oauth2'
|
5
|
+
require_relative 'extensions/oauth2_ext'
|
6
|
+
require_relative 'contexts/client_credential_context'
|
7
|
+
require_relative 'contexts/authorization_code_context'
|
8
|
+
require_relative 'contexts/on_behalf_of_context'
|
9
|
+
require_relative 'contexts/oauth_context'
|
10
|
+
require_relative 'contexts/oauth_custom_flow'
|
11
|
+
|
12
|
+
module MicrosoftKiotaAuthenticationOAuth
|
13
|
+
# Access Token Provider class implementation
|
14
|
+
class OAuthAccessTokenProvider
|
15
|
+
# This is the initializer for OAuthAccessTokenProvider.
|
16
|
+
# :params
|
17
|
+
# token_request_context: a instance of one of our token request context or a custom implementation
|
18
|
+
# allowed_hosts: an array of strings, where each string is an allowed host, default is empty
|
19
|
+
# scopes: an array of strings, where each string is a scope, default is empty array
|
20
|
+
def initialize(token_request_context, allowed_hosts = [], scopes = [])
|
21
|
+
raise StandardError, 'Parameter token_request_context cannot be nil.' if token_request_context.nil?
|
22
|
+
|
23
|
+
@token_request_context = token_request_context
|
24
|
+
|
25
|
+
unless @token_request_context.is_a?(MicrosoftKiotaAuthenticationOAuth::OAuthContext)
|
26
|
+
raise StandardError, 'Parameter token_request_context must be an instance of one of our grant flow context classes.'
|
27
|
+
end
|
28
|
+
|
29
|
+
@cached_token = nil
|
30
|
+
|
31
|
+
@host_validator = if allowed_hosts.nil? || allowed_hosts.size.zero?
|
32
|
+
MicrsoftKiotaAbstractions::AllowedHostsValidator.new(['graph.microsoft.com', 'graph.microsoft.us', 'dod-graph.microsoft.us',
|
33
|
+
'graph.microsoft.de', 'microsoftgraph.chinacloudapi.cn',
|
34
|
+
'canary.graph.microsoft.com'])
|
35
|
+
else
|
36
|
+
MicrosoftKiotaAbstractions::AllowedHostsValidator.new(allowed_hosts)
|
37
|
+
end
|
38
|
+
@token_request_context.initialize_oauth_provider
|
39
|
+
@token_request_context.initialize_scopes(scopes)
|
40
|
+
end
|
41
|
+
|
42
|
+
# This function obtains the authorization token.
|
43
|
+
# :params
|
44
|
+
# uri: a string containing the uri
|
45
|
+
# additional_params: hash of symbols to string values, ie { response_mode: 'fragment', prompt: 'login' }
|
46
|
+
# default is empty hash
|
47
|
+
def get_authorization_token(uri, additional_properties = {})
|
48
|
+
return nil if !uri || !@host_validator.url_host_valid?(uri)
|
49
|
+
|
50
|
+
parsed_url = URI(uri)
|
51
|
+
|
52
|
+
raise StandardError, 'Only https is supported' if parsed_url.scheme != 'https'
|
53
|
+
|
54
|
+
Fiber.new do
|
55
|
+
if @cached_token
|
56
|
+
token = OAuth2::AccessToken.from_hash(@token_request_context.oauth_provider, @cached_token)
|
57
|
+
return token.token if !token.nil? && !token.expired?
|
58
|
+
|
59
|
+
if token.expired?
|
60
|
+
token = token.refresh!
|
61
|
+
@cached_token = token.to_hash
|
62
|
+
return token.token
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
token = nil
|
67
|
+
token = @token_request_context.get_token
|
68
|
+
|
69
|
+
@cached_token = token.to_hash unless token.nil?
|
70
|
+
return token.token unless token.nil?
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
attr_reader :scopes, :host_validator
|
75
|
+
|
76
|
+
protected
|
77
|
+
|
78
|
+
attr_writer :host_validator, :token_credential, :scopes, :cached_token
|
79
|
+
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'microsoft_kiota_abstractions'
|
2
|
+
require_relative './oauth_access_token_provider'
|
3
|
+
|
4
|
+
module MicrosoftKiotaAuthenticationOAuth
|
5
|
+
class OAuthAuthenticationProvider < MicrosoftKiotaAbstractions::BaseBearerTokenAuthenticationProvider
|
6
|
+
def initialize(token_request_context, allowed_hosts, scopes)
|
7
|
+
super(MicrosoftKiotaAuthenticationOAuth::OAuthAccessTokenProvider.new(token_request_context, allowed_hosts, scopes))
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -1,5 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "microsoft_kiota_authentication_oauth/version"
|
4
|
+
require_relative "microsoft_kiota_authentication_oauth/contexts/authorization_code_context"
|
5
|
+
require_relative "microsoft_kiota_authentication_oauth/contexts/client_credential_context"
|
6
|
+
require_relative "microsoft_kiota_authentication_oauth/contexts/on_behalf_of_context"
|
7
|
+
require_relative "microsoft_kiota_authentication_oauth/contexts/oauth_context"
|
8
|
+
require_relative "microsoft_kiota_authentication_oauth/contexts/oauth_custom_flow"
|
9
|
+
require_relative "microsoft_kiota_authentication_oauth/extensions/oauth2_ext"
|
10
|
+
require_relative "microsoft_kiota_authentication_oauth/oauth_access_token_provider"
|
11
|
+
require_relative "microsoft_kiota_authentication_oauth/oauth_authentication_provider"
|
12
|
+
|
13
|
+
module MicrosoftKiotaAuthenticationOAuth
|
5
14
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/microsoft_kiota_authentication_oauth/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "microsoft_kiota_authentication_oauth"
|
7
|
+
spec.version = MicrosoftKiotaAuthenticationOAuth::VERSION
|
8
|
+
spec.authors = 'Microsoft Corporation'
|
9
|
+
spec.email = 'graphsdkpub@microsoft.com'
|
10
|
+
spec.description = 'Kiota Authentication implementation with oauth2'
|
11
|
+
spec.summary = 'Microsoft Kiota Authentication OAuth - Kiota Ruby Authentication OAuth library'
|
12
|
+
spec.homepage = 'https://microsoft.github.io/kiota/'
|
13
|
+
spec.license = 'MIT'
|
14
|
+
spec.metadata = {
|
15
|
+
'bug_tracker_uri' => 'https://github.com/microsoft/kiota-authentication-oauth-ruby/issues',
|
16
|
+
'changelog_uri' => 'https://github.com/microsoft/kiota-authentication-oauth-ruby/blob/main/CHANGELOG.md',
|
17
|
+
'homepage_uri' => spec.homepage,
|
18
|
+
'source_code_uri' => 'https://github.com/microsoft/kiota-authentication-oauth-ruby',
|
19
|
+
'github_repo' => 'ssh://github.com/microsoft/kiota-authentication-oauth-ruby'
|
20
|
+
}
|
21
|
+
spec.required_ruby_version = ">= 2.7.0"
|
22
|
+
|
23
|
+
# Specify which files should be added to the gem when it is released.
|
24
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
26
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
27
|
+
end
|
28
|
+
|
29
|
+
spec.bindir = 'bin'
|
30
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
31
|
+
spec.require_paths = ['lib']
|
32
|
+
|
33
|
+
spec.add_runtime_dependency 'microsoft_kiota_abstractions', '~> 0.12.0', '>= 0.12.0'
|
34
|
+
spec.add_runtime_dependency 'oauth2', '~> 2.0'
|
35
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
36
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
37
|
+
spec.add_development_dependency 'rubocop'
|
38
|
+
end
|
metadata
CHANGED
@@ -1,26 +1,133 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: microsoft_kiota_authentication_oauth
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Microsoft Corporation
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
11
|
+
date: 2023-01-09 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: microsoft_kiota_abstractions
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.12.0
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.12.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.12.0
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.12.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: oauth2
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '2.0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - "~>"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '2.0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: rake
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - "~>"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '13.0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - "~>"
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '13.0'
|
61
|
+
- !ruby/object:Gem::Dependency
|
62
|
+
name: rspec
|
63
|
+
requirement: !ruby/object:Gem::Requirement
|
64
|
+
requirements:
|
65
|
+
- - "~>"
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '3.0'
|
68
|
+
type: :development
|
69
|
+
prerelease: false
|
70
|
+
version_requirements: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '3.0'
|
75
|
+
- !ruby/object:Gem::Dependency
|
76
|
+
name: rubocop
|
77
|
+
requirement: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
type: :development
|
83
|
+
prerelease: false
|
84
|
+
version_requirements: !ruby/object:Gem::Requirement
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
89
|
+
description: Kiota Authentication implementation with oauth2
|
90
|
+
email: graphsdkpub@microsoft.com
|
15
91
|
executables: []
|
16
92
|
extensions: []
|
17
93
|
extra_rdoc_files: []
|
18
94
|
files:
|
95
|
+
- ".github/CODEOWNERS"
|
96
|
+
- ".github/dependabot.yml"
|
97
|
+
- ".github/workflows/code-ql.yml"
|
98
|
+
- ".github/workflows/conflicting-pr-label.yml"
|
99
|
+
- ".github/workflows/projectsbot.yml"
|
100
|
+
- ".github/workflows/release.yml"
|
101
|
+
- ".github/workflows/ruby.yml"
|
102
|
+
- ".gitignore"
|
103
|
+
- CHANGELOG.md
|
104
|
+
- CODE_OF_CONDUCT.md
|
105
|
+
- Gemfile
|
106
|
+
- LICENSE
|
107
|
+
- README.md
|
108
|
+
- Rakefile
|
109
|
+
- SECURITY.md
|
110
|
+
- SUPPORT.md
|
19
111
|
- lib/microsoft_kiota_authentication_oauth.rb
|
20
|
-
|
112
|
+
- lib/microsoft_kiota_authentication_oauth/contexts/authorization_code_context.rb
|
113
|
+
- lib/microsoft_kiota_authentication_oauth/contexts/client_credential_context.rb
|
114
|
+
- lib/microsoft_kiota_authentication_oauth/contexts/oauth_context.rb
|
115
|
+
- lib/microsoft_kiota_authentication_oauth/contexts/oauth_custom_flow.rb
|
116
|
+
- lib/microsoft_kiota_authentication_oauth/contexts/on_behalf_of_context.rb
|
117
|
+
- lib/microsoft_kiota_authentication_oauth/extensions/oauth2_ext.rb
|
118
|
+
- lib/microsoft_kiota_authentication_oauth/oauth_access_token_provider.rb
|
119
|
+
- lib/microsoft_kiota_authentication_oauth/oauth_authentication_provider.rb
|
120
|
+
- lib/microsoft_kiota_authentication_oauth/version.rb
|
121
|
+
- microsoft_kiota_authentication_oauth.gemspec
|
122
|
+
homepage: https://microsoft.github.io/kiota/
|
21
123
|
licenses:
|
22
124
|
- MIT
|
23
|
-
metadata:
|
125
|
+
metadata:
|
126
|
+
bug_tracker_uri: https://github.com/microsoft/kiota-authentication-oauth-ruby/issues
|
127
|
+
changelog_uri: https://github.com/microsoft/kiota-authentication-oauth-ruby/blob/main/CHANGELOG.md
|
128
|
+
homepage_uri: https://microsoft.github.io/kiota/
|
129
|
+
source_code_uri: https://github.com/microsoft/kiota-authentication-oauth-ruby
|
130
|
+
github_repo: ssh://github.com/microsoft/kiota-authentication-oauth-ruby
|
24
131
|
post_install_message:
|
25
132
|
rdoc_options: []
|
26
133
|
require_paths:
|
@@ -29,15 +136,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
29
136
|
requirements:
|
30
137
|
- - ">="
|
31
138
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
139
|
+
version: 2.7.0
|
33
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
34
141
|
requirements:
|
35
142
|
- - ">="
|
36
143
|
- !ruby/object:Gem::Version
|
37
144
|
version: '0'
|
38
145
|
requirements: []
|
39
|
-
rubygems_version: 3.3.
|
146
|
+
rubygems_version: 3.3.26
|
40
147
|
signing_key:
|
41
148
|
specification_version: 4
|
42
|
-
summary:
|
149
|
+
summary: Microsoft Kiota Authentication OAuth - Kiota Ruby Authentication OAuth library
|
43
150
|
test_files: []
|