//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 responseMap =(Map)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 tokenMapToUpsertInSalesforce = New Map () ; 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 responseMap = (Map) 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 revokeAccessToken(String accessToken){ // System.debug('>>>>>accessToken='+accessToken); // Map revokeMap=new Map(); // 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 userInfo = (Map) 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; } } }