@microsoft/mgt
Version:
The Microsoft Graph Toolkit
127 lines (114 loc) • 2.73 kB
text/typescript
/**
* -------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All Rights Reserved. Licensed under the MIT License.
* See License in the project root for license information.
* -------------------------------------------------------------------------------------------
*/
import { Graph } from '../Graph';
import { IProvider, ProviderState } from './IProvider';
/**
* AadTokenProvider
*
* @interface AadTokenProvider
*/
declare interface AadTokenProvider {
/**
* get token with x
*
* @param {string} x
* @memberof AadTokenProvider
*/
getToken(x: string);
}
/**
* contains the contextual services available to a web part
*
* @export
* @interface WebPartContext
*/
declare interface WebPartContext {
// tslint:disable-next-line: completed-docs
aadTokenProviderFactory: any;
}
/**
* SharePoint Provider handler
*
* @export
* @class SharePointProvider
* @extends {IProvider}
*/
export class SharePointProvider extends IProvider {
/**
* returns _provider
*
* @readonly
* @memberof SharePointProvider
*/
get provider() {
return this._provider;
}
/**
* returns _idToken
*
* @readonly
* @type {boolean}
* @memberof SharePointProvider
*/
get isLoggedIn(): boolean {
return !!this._idToken;
}
/**
* privilege level for authenication
*
* @type {string[]}
* @memberof SharePointProvider
*/
public scopes: string[];
/**
* authority
*
* @type {string}
* @memberof SharePointProvider
*/
public authority: string;
private _idToken: string;
private _provider: AadTokenProvider;
constructor(context: WebPartContext) {
super();
context.aadTokenProviderFactory.getTokenProvider().then(
(tokenProvider: AadTokenProvider): void => {
this._provider = tokenProvider;
this.graph = new Graph(this);
this.internalLogin();
}
);
}
/**
* uses provider to receive access token via SharePoint Provider
*
* @returns {Promise<string>}
* @memberof SharePointProvider
*/
public async getAccessToken(): Promise<string> {
let accessToken: string;
try {
accessToken = await this.provider.getToken('https://graph.microsoft.com');
} catch (e) {
throw e;
}
return accessToken;
}
/**
* update scopes
*
* @param {string[]} scopes
* @memberof SharePointProvider
*/
public updateScopes(scopes: string[]) {
this.scopes = scopes;
}
private async internalLogin(): Promise<void> {
this._idToken = await this.getAccessToken();
this.setState(this._idToken ? ProviderState.SignedIn : ProviderState.SignedOut);
}
}