181 lines
8.9 KiB
OpenEdge ABL
181 lines
8.9 KiB
OpenEdge ABL
public with sharing class MicrosoftAuth extends BaseStorageAuth {
|
|
// private static string key = '24425128-333b-4d65-ab59-da527a18e02b';
|
|
// private static string secert = 'c_H8Q~ZKOFl3htHnqRRUWooXjewlpmu5w9ZiNakk';
|
|
// private static string redirect_uri = 'https://login.salesforce.com/apex/HIC_FilesME__CompleteAuthPage';
|
|
// private static string authUrl='https://login.microsoftonline.com/00239250-7448-4ce2-9985-06db30238ef6/oauth2/v2.0/authorize';
|
|
// private static string oneDriveScope='offline_access%20user.read%20files.readwrite.all';
|
|
// private static string msTeamScope='offline_access%20user.read%20files.readwrite.all%20sites.readwrite.all%20team.readbasic.all%20teamtemplates.read%20team.create';
|
|
// private static string sharePointScope='offline_access%20user.read%20files.readwrite.all%20sites.readwrite.all';
|
|
// private static string tokenUrl='https://login.microsoftonline.com/00239250-7448-4ce2-9985-06db30238ef6/oauth2/token';
|
|
|
|
|
|
static String PROVIDER_TYPE = 'OneDrive';
|
|
// @AuraEnabled
|
|
// public static String createAuthURL(String externalStorage) {
|
|
// String appScope = '';
|
|
// if(externalStorage == 'Sharepoint'){
|
|
// appScope = sharePointScope;
|
|
// }else if(externalStorage == 'OneDrive'){
|
|
// appScope = oneDriveScope;
|
|
// }else if(externalStorage == 'MsTeam'){
|
|
// appScope = msTeamScope;
|
|
// }
|
|
// String key = EncodingUtil.urlEncode(key,'UTF-8');
|
|
// String uri = EncodingUtil.urlEncode(redirect_uri,'UTF-8');
|
|
// String authuri = '';
|
|
// authuri = authUrl+'?'+
|
|
// 'client_id='+key+
|
|
// '&response_type=code'+
|
|
// '&scope='+appScope+
|
|
// '&redirect_uri='+uri+
|
|
// '&access_type=offline';
|
|
// System.debug('url>>'+authuri);
|
|
// return authuri;
|
|
// }
|
|
|
|
// constructor to initialize provider type for Microsoft (OneDrive, Sharepoint, MsTeam)
|
|
public MicrosoftAuth() {
|
|
// PROVIDER_TYPE = providerType;
|
|
}
|
|
|
|
public override void getAccessToken(String code ,String storage,boolean isAdminCred,String userId){
|
|
try {
|
|
System.debug('>>>>>code='+code);
|
|
System.debug('>>>>>storage='+storage);
|
|
System.debug('>>>>>isAdminCred='+isAdminCred);
|
|
System.debug('>>>>>userId='+userId);
|
|
|
|
// boolean isProduction=OrgSandBoxOrProduction();
|
|
StorageProviderConfigUtil.Config config = StorageProviderConfigUtil.getConfig(PROVIDER_TYPE);
|
|
String redirectUri = config.redirectUri;
|
|
|
|
boolean isProduction = OAuthTokenManager.orgSandBoxOrProduction();
|
|
if(!isProduction){
|
|
redirectUri = redirectUri.replace('login.salesforce.com', 'test.salesforce.com');
|
|
}
|
|
|
|
HttpRequest req = new HttpRequest();
|
|
req.setMethod('POST');
|
|
req.setEndpoint(config.tokenEndpoint);
|
|
req.setHeader('content-type', 'application/x-www-form-urlencoded');
|
|
|
|
String body = 'code=' + EncodingUtil.urlEncode(code, 'UTF-8') +
|
|
'&client_id=' + EncodingUtil.urlEncode(config.clientId, 'UTF-8') +
|
|
'&client_secret=' + EncodingUtil.urlEncode(config.clientSecret, 'UTF-8') +
|
|
'&redirect_uri=' + EncodingUtil.urlEncode(redirectUri, 'UTF-8') +
|
|
'&grant_type=authorization_code';
|
|
|
|
req.setHeader('Content-length', String.valueOf(body.length()));
|
|
req.setBody(body);
|
|
req.setTimeout(60*1000);
|
|
|
|
Http http = new Http();
|
|
String responseText;
|
|
HttpResponse response = http.send(req);
|
|
responseText = response.getBody();
|
|
|
|
if(response.getStatusCode() == 200){
|
|
responseText = response.getBody();
|
|
Map<String,object> responseMap =(Map<String,object>)JSON.deserializeUntyped(responseText) ;
|
|
System.debug('responseMap>>>:'+JSON.serializePretty(responseMap));
|
|
String token = String.valueOf(responseMap.get('access_token'));
|
|
String refreshToken=String.valueOf(responseMap.get('refresh_token'));
|
|
System.debug('refreshToken>>>:'+JSON.serializePretty(refreshToken));
|
|
System.debug('>>>>storage'+storage);
|
|
|
|
String connectedUsername = fetchUserInfo(token);
|
|
|
|
Map<String,object> tokenMapToUpsertInSalesforce = New Map<string,object> () ;
|
|
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Auth_Provider_Name__c','Microsoft');
|
|
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Connected_Username__c',connectedUsername);
|
|
tokenMapToUpsertInSalesforce.put('HIC_FilesME__External_Storage_Type__c',storage);
|
|
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Refresh_Token__c',String.valueOf(responseMap.get('refresh_token')));
|
|
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Access_Token__c',String.valueOf(responseMap.get('access_token')));
|
|
tokenMapToUpsertInSalesforce.put('HIC_FilesME__User__c',userId);
|
|
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Is_Admin_level_Credentials__c',isAdminCred);
|
|
tokenMapToUpsertInSalesforce.put('HIC_FilesME__API_Endpoint_URL__c',config.tokenEndpoint);
|
|
|
|
OAuthTokenManager.storeToken(tokenMapToUpsertInSalesforce);
|
|
}
|
|
}
|
|
catch (Exception e) {
|
|
FME_Logger.error('Error getting access token ' + e.getMessage(),'MicrosoftAuth','getAccessToken');
|
|
}
|
|
|
|
}
|
|
|
|
// CAN NOT SAVE ACCESS TOKEN OR REFRESH TOKEN (TOO LARGE TO FIT IN 5 TEXT TYPE FIELDS)
|
|
|
|
public override String refreshAccessToken(String refreshToken){
|
|
try {
|
|
StorageProviderConfigUtil.Config config = StorageProviderConfigUtil.getConfig(PROVIDER_TYPE);
|
|
|
|
String body = 'client_id=' + EncodingUtil.urlEncode(config.clientId, 'UTF-8') +
|
|
'&client_secret=' + EncodingUtil.urlEncode(config.clientSecret, 'UTF-8') +
|
|
'&refresh_token=' + EncodingUtil.urlEncode(refreshToken, 'UTF-8') +
|
|
'&grant_type=refresh_token' +
|
|
'&scope=openid profile email';
|
|
|
|
Http http = new Http();
|
|
HttpRequest req = new HttpRequest();
|
|
// req.setEndpoint('https://login.microsoftonline.com/00239250-7448-4ce2-9985-06db30238ef6/oauth2/v2.0/token');
|
|
req.setEndpoint(config.tokenEndpoint);
|
|
req.setMethod('POST');
|
|
req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
|
|
req.setBody(body);
|
|
|
|
HttpResponse res = http.send(req);
|
|
if (res.getStatusCode() == 200) {
|
|
Map<String, Object> responseMap = (Map<String, Object>) JSON.deserializeUntyped(res.getBody());
|
|
System.debug('responseMap>>>:' + JSON.serializePretty(responseMap));
|
|
String token = String.valueOf(responseMap.get('access_token'));
|
|
System.debug('token>>>:' + JSON.serializePretty(token));
|
|
return token;
|
|
} else {
|
|
System.debug('Failed to refresh token. Response: ' + res.getBody());
|
|
return null;
|
|
}
|
|
} catch (Exception e) {
|
|
System.debug('Exception while refreshing access token: ' + e.getMessage());
|
|
FME_Logger.error('Error refreshing access token: ' + e.getMessage(),'MicrosoftAuth','refreshAccessToken');
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private static String fetchUserInfo(String accessToken){
|
|
try {
|
|
String graphApiEndpoint = 'https://graph.microsoft.com/v1.0/me';
|
|
HttpRequest req = new HttpRequest();
|
|
req.setEndpoint(graphApiEndpoint);
|
|
req.setMethod('GET');
|
|
req.setHeader('Authorization', 'Bearer ' + accessToken);
|
|
|
|
Http http = new Http();
|
|
HttpResponse res = http.send(req);
|
|
|
|
if(res.getStatusCode() == 200){
|
|
Map<String, Object> userInfo = (Map<String, Object>) JSON.deserializeUntyped(res.getBody());
|
|
String name = (String) userInfo.get('displayName');
|
|
String email = (String) userInfo.get('mail');
|
|
|
|
return String.isNotBlank(name) ? name : email;
|
|
} else {
|
|
System.debug('Failed to fetch Microsoft user info: ' + res.getBody());
|
|
return null;
|
|
}
|
|
} catch (Exception e){
|
|
FME_Logger.error('Error fetching user info: ' + e.getMessage(),'MicrosoftAuth','fetchUserInfo');
|
|
return null;
|
|
}
|
|
}
|
|
|
|
@AuraEnabled
|
|
public static void revokeAccessToken(String accessToken){
|
|
try {
|
|
|
|
} catch (Exception e) {
|
|
throw new AuraHandledException(e.getMessage());
|
|
}
|
|
}
|
|
|
|
} |