Backup_FME_personal/force-app/main/default/classes/SharePointAuth.cls

181 lines
8.9 KiB
OpenEdge ABL

public with sharing class SharePointAuth 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 = 'SharePoint';
// @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 SharePointAuth() {
// 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','SharePoint');
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Connected_Username__c',connectedUsername);
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Provider__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());
}
}
}