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

240 lines
12 KiB
OpenEdge ABL

//For Box
public with sharing class BoxAuth extends BaseStorageAuth {
// private static string key = 'p1beu78ozaybr6xen7fk98ksltgznyq7';
// private static string secert = 'v9p91JqtVNTBGgSjEU8ULSJ2JZ4ExHut';
// private static string redirectUri = 'https://login.salesforce.com/apex/HIC_FilesME__CompleteAuthPage';
// private static string authUrl='https://account.box.com/api/oauth2/authorize';
// private static string Scope='root_readwrite';
// private static string tokenUrl='https://api.box.com/oauth2/token';
private static final String PROVIDER_TYPE = 'Box';
// No call for this method found!
// @AuraEnabled
// public static String createAuthURL(String externalStorage) {
// String key = EncodingUtil.urlEncode(key,'UTF-8');
// String uri = EncodingUtil.urlEncode(redirectUri,'UTF-8');
// String authuri = '';
// authuri = authUrl+'?'+
// 'client_id='+key+
// '&response_type=code'+
// '&scope='+scope+
// '&redirect_uri='+uri+
// '&access_type=offline';
// return authuri;
// }
public override void getAccessToken(String code,String Storage,boolean isAdminCred,String userId){
try {
// String redirectUri; // using static redirectUri value
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-Type', 'application/x-www-form-urlencoded');
// String messageBody ='code='+code+
// '&client_id='+key+
// '&client_secret='+secert+
// '&redirect_uri='+redirectUri+
// '&grant_type=authorization_code';
req.setHeader('Content-length', String.valueOf(body.length()));
req.setBody(body);
req.setTimeout(60*1000);
Http callout = new Http();
String responseText;
HttpResponse response = callout.send(req);
responseText = response.getBody();
Map<String,object> responseMap =(Map<String,object>)JSON.deserializeUntyped(responseText) ;
System.debug('responseMap>>>:'+JSON.serializePretty(responseMap));
String accessToken = String.valueOf(responseMap.get('access_token'));
String refreshToken=String.valueOf(responseMap.get('refresh_token'));
System.debug('refreshToken>>>:'+JSON.serializePretty(refreshToken));
HttpRequest req1 = new HttpRequest();
req1.setEndpoint('https://api.box.com/2.0/users/me');
req1.setMethod('GET');
req1.setHeader('Authorization', 'Bearer ' + accessToken);
String connectedUsername = fetchUserInfo(accessToken);
Map<String,object> tokenMapToUpsertInSalesforce = New Map<string,object> () ;
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Auth_Provider_Name__c','Box');
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Connected_Username__c',connectedUsername);
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Provider__c',Storage);
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Refresh_Token__c',refreshToken);
tokenMapToUpsertInSalesforce.put('HIC_FilesME__Access_Token__c',accessToken);
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);
// string accessToken=String.valueOf(responseMap.get('access_token'));
// revokeAccessToken(accessToken);
System.debug('Storing token for Box');
OAuthTokenManager.storeToken(tokenMapToUpsertInSalesforce);
}
catch (Exception e) {
FME_Logger.error(e.getMessage(), 'BoxAuth' + e.getLineNumber(), 'getAccessToken');
}
}
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';
Http http = new Http();
HttpRequest req = new HttpRequest();
req.setEndpoint('https://api.box.com/oauth2/token');
req.setMethod('POST');
req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
// String body = 'grant_type=refresh_token' +
// '&refresh_token=' + EncodingUtil.urlEncode(refreshToken, 'UTF-8') +
// '&client_id=' + EncodingUtil.urlEncode(key, 'UTF-8') +
// '&client_secret=' + EncodingUtil.urlEncode(secert, 'UTF-8');
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 accessToken = String.valueOf(responseMap.get('access_token'));
System.debug('accessToken>>>:' + JSON.serializePretty(accessToken));
return accessToken;
} else {
System.debug('Req body<>: '+ JSON.serializePretty(body));
System.debug('Failed to refresh token. Response: ' + res.getBody());
return null;
}
} catch (Exception e) {
System.debug('Exception while refreshing access token: ' + e.getMessage());
return null;
}
}
// Needs tobe called while disconnecting (currently not being utilized)
// @AuraEnabled
// public static Map<String,Object> revokeAccessToken(String accessToken){
// System.debug('>>>>>accessToken='+accessToken);
// Map<String,Object> revokeMap=new Map<String,Object>();
// try {
// String revokeUrl = 'https://account.box.com/api/oauth2/revoke';
// // Create an HTTP request
// HttpRequest req = new HttpRequest();
// req.setEndpoint(revokeUrl);
// req.setMethod('POST');
// // Set the body with parameters
// String body = 'token=' + EncodingUtil.urlEncode(accessToken, 'UTF-8') +
// '&client_id=' + EncodingUtil.urlEncode(key, 'UTF-8') +
// '&client_secret=' + EncodingUtil.urlEncode(secert, 'UTF-8');
// req.setBody(body);
// req.setHeader('Content-Type', 'application/x-www-form-urlencoded');
// // Create an HTTP object to send the request
// Http http = new Http();
// HttpResponse res = http.send(req);
// System.debug('Response Body: ' + res.getBody());
// // Check the response status
// if (res.getStatusCode() == 200) {
// System.debug('Token revoked successfully');
// revokeMap.put('message','Token revoked successfully');
// revokeMap.put('state', (Object)'success');
// revokeMap.put('code' , (Object)200);
// } else {
// System.debug('Failed to revoke token. Status: ' + res.getStatusCode() + ' Response: ' + res.getBody());
// revokeMap.put('message','Failed to revoke token');
// revokeMap.put('state', (Object)'Failed');
// revokeMap.put('code' , (Object)500);
// }
// // }
// } catch (Exception e) {
// revokeMap.put('message','error Occured');
// revokeMap.put('state', (Object)'Error');
// revokeMap.put('code' , (Object)401);
// System.debug('>>>Error message='+e.getMessage());
// throw new AuraHandledException(e.getMessage());
// }
// return revokeMap;
// }
// public override void revokeAccessToken(String accessToken){
// System.debug('>>>>>accessToken='+accessToken);
// try {
// StorageProviderConfigUtil.Config config = StorageProviderConfigUtil.getConfig(PROVIDER_TYPE);
// HttpRequest req = new HttpRequest();
// String revokeUrl = 'https://api.box.com/oauth2/revoke';
// req.setMethod('POST');
// req.setEndpoint(revokeUrl);
// req.setHeader('content-type', 'application/x-www-form-urlencoded');
// String body =
// '&client_id=' + EncodingUtil.urlEncode(config.clientId, 'UTF-8') +
// '&client_secret=' + EncodingUtil.urlEncode(config.clientSecret, 'UTF-8') +
// '&token=' + EncodingUtil.urlEncode(accessToken, 'UTF-8');
// req.setBody(body);
// Http http = new Http();
// HttpResponse res = http.send(req);
// if(res.getStatusCode() == 200){
// System.debug('Access token revoked.');
// }
// else{
// System.debug('Failed to revoke access token. Error ' + res.getStatusCode() +': '+ res.getBody());
// }
// }
// catch (Exception e) {
// FME_Logger.error(e.getMessage(), 'BoxAuth' + e.getLineNumber(), 'revokeAccessToken');
// }
// }
// Call Box UserInfo API to fetch connected username/email
private static String fetchUserInfo(String accessToken){
try {
HttpRequest req = new HttpRequest();
req.setEndpoint('https://api.box.com/2.0/users/me');
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('name');
String email = (String) userInfo.get('login');
return String.isNotBlank(name) ? name : email;
} else {
System.debug('Failed to fetch Box user info: ' + res.getBody());
return null;
}
} catch (Exception e){
FME_Logger.error('Error fetching user info: ' + e.getMessage(),'BoxAuth','fetchUserInfo');
return null;
}
}
}