-
Notifications
You must be signed in to change notification settings - Fork 517
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
54b5178
commit 28d9d1d
Showing
3 changed files
with
107 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
import CredentialProvider from "./CredentialProvider"; | ||
import TokenManager from "../http/bearer_token/TokenManager"; | ||
import AuthStrategy from "../auth_strategy/AuthStrategy"; | ||
import OrgsTokenManager from "../http/bearer_token/OrgsTokenManager"; | ||
import TokenAuthStrategy from "../auth_strategy/TokenAuthStrategy"; | ||
|
||
class OrgsCredentialProvider extends CredentialProvider { | ||
grantType: string; | ||
clientId: string; | ||
clientSecret: string; | ||
tokenManager: TokenManager | null; | ||
|
||
constructor() { | ||
super("client-credentials"); | ||
this.grantType = "client_credentials"; | ||
this.clientId = ""; | ||
this.clientSecret = ""; | ||
this.tokenManager = null; | ||
} | ||
|
||
public toAuthStrategy(): AuthStrategy { | ||
if (this.tokenManager == null) { | ||
this.tokenManager = new OrgsTokenManager({ | ||
grantType: this.grantType, | ||
clientId: this.clientId, | ||
clientSecret: this.clientSecret, | ||
}); | ||
} | ||
return new TokenAuthStrategy(this.tokenManager); | ||
} | ||
} | ||
|
||
namespace OrgsCredentialProvider { | ||
export class OrgsCredentialProviderBuilder { | ||
private readonly instance: OrgsCredentialProvider; | ||
|
||
constructor() { | ||
this.instance = new OrgsCredentialProvider(); | ||
} | ||
|
||
public setClientId(clientId: string): OrgsCredentialProviderBuilder { | ||
this.instance.clientId = clientId; | ||
return this; | ||
} | ||
|
||
public setClientSecret( | ||
clientSecret: string | ||
): OrgsCredentialProviderBuilder { | ||
this.instance.clientSecret = clientSecret; | ||
return this; | ||
} | ||
|
||
public setTokenManager( | ||
tokenManager: TokenManager | ||
): OrgsCredentialProviderBuilder { | ||
this.instance.tokenManager = tokenManager; | ||
return this; | ||
} | ||
|
||
public build(): OrgsCredentialProvider { | ||
return this.instance; | ||
} | ||
} | ||
} | ||
|
||
export = OrgsCredentialProvider; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
import TokenManager from "./TokenManager"; | ||
import { | ||
TokenListInstance, | ||
TokenListInstanceCreateOptions, | ||
} from "../../rest/previewIam/v1/token"; | ||
import PreviewIamBase from "../../rest/PreviewIamBase"; | ||
import V1 from "../../rest/previewIam/V1"; | ||
import NoAuthCredentialProvider from "../../credential_provider/NoAuthCredentialProvider"; | ||
import { Client } from "../../base/BaseTwilio"; | ||
|
||
export default class OrgsTokenManager implements TokenManager { | ||
private readonly params: TokenListInstanceCreateOptions; | ||
|
||
constructor(params: TokenListInstanceCreateOptions) { | ||
this.params = params; | ||
} | ||
|
||
getParams(): TokenListInstanceCreateOptions { | ||
return this.params; | ||
} | ||
|
||
async fetchToken(): Promise<string> { | ||
const noAuthCredentialProvider = | ||
new NoAuthCredentialProvider.NoAuthCredentialProvider(); | ||
const client = new Client(); | ||
client.setCredentialProvider(noAuthCredentialProvider); | ||
|
||
const tokenListInstance = TokenListInstance( | ||
new V1(new PreviewIamBase(client)) | ||
); | ||
return tokenListInstance | ||
.create(this.params) | ||
.then((token) => { | ||
return token.accessToken; | ||
}) | ||
.catch((error) => { | ||
throw new Error(`Failed to fetch access token: ${error}`); | ||
}); | ||
} | ||
} |