import querystring from 'querystring'
import base64 from 'base64-utf8'
import Taro from '@tarojs/taro'
import {remoteUrl} from "./request";
import config from "../config";
export default class OAuth2 {
constructor({clientId, clientSecret, baseSite, authorizePath, accessTokenPath, callbackURL, customHeaders}) {
this._clientId = clientId;
this._clientSecret = clientSecret;
this._baseSite = baseSite;
this._authorizeUrl = authorizePath || "/oauth/authorize";
this._accessTokenUrl = accessTokenPath || "/oauth/access_token";
this._callbackURL = callbackURL;
this._accessTokenName = "access_token";
this._authMethod = "Basic";
this._customHeaders = customHeaders || {};
}
buildAuthHeader() {
const key = this._clientId + ':' + this._clientSecret;
const str = base64.encode(key);
return this._authMethod + ' ' + str;
};
_getAccessTokenUrl = function () {
return this._baseSite + this._accessTokenUrl;
}
getOAuthPasswordCredentials(username, password, user) {
return new Promise((resolve, reject) => {
const postData = 'grant_type=password&username=' + username + '&password=' + password + "&user=" + user;
const postHeaders = {
'Authorization': this.buildAuthHeader(),
'Content-Type': 'application/x-www-form-urlencoded'
};
const url = this._getAccessTokenUrl()
Taro.request({
method: "POST", url, header: postHeaders, data: postData, dataType: 'form', success: (res) => {
resolve(this.getResults(res.data))
}, fail: (error) => {
reject(error)
}
});
});
}
getResults(data) {
let results;
try {
results = JSON.parse(data);
} catch (e) {
results = querystring.parse(data);
}
return results;
}
}