public with sharing class OneDriveFeature extends CloudStorageBase { // private static final String ONEDRIVE_API_URL = 'https://api.dropboxapi.com/2'; // private static final String DROPBOX_API_2_URL = 'https://content.dropboxapi.com/2/files'; private static String externalStorage = 'OneDrive'; public override OperationResult listFiles(Boolean isServiceMode, Boolean myDrive, String userId, Boolean isRootFolder, String folderId, String accessToken, String level) { List> resultFiles = new List>(); Map accessTokenMap = new Map(); // String accessToken; String refreshToken; OperationResult result; try { accessTokenMap = CloudStorageUtlilty.getAccessToken(isServiceMode, userId, externalStorage); accessToken = (String) accessTokenMap.get('ACCESS_TOKEN'); refreshToken = (String) accessTokenMap.get('REFRESH_TOKEN'); System.debug('isServiceMode ' + isServiceMode); System.debug('accessToken ' + accessToken); // endpoint String endpoint = (String.isBlank(folderId) && isRootFolder) ? 'https://graph.microsoft.com/v1.0/me/drive/root/children' : 'https://graph.microsoft.com/v1.0/me/drive/items/' + folderId + '/children'; Map headers = new Map{ 'Authorization' => 'Bearer ' + accessToken }; Http http = new Http(); HttpRequest req = new HttpRequest(); req.setEndpoint(endpoint); req.setMethod('GET'); req.setHeader('Authorization', 'Bearer ' + accessToken); HttpResponse res = http.send(req); if (res.getStatusCode() != 200) { MicrosoftAuth auth = new MicrosoftAuth(); String newAccessToken = auth.refreshAccessToken(refreshToken); // String newAccessToken = MicrosoftAuth.refreshAccessToken(refreshToken); if (newAccessToken != null) { req.setHeader('Authorization', 'Bearer ' + newAccessToken); res = http.send(req); if (res.getStatusCode() == 200) { accessToken = newAccessToken; } else { throw new AuraHandledException('Error after token refresh: ' + res.getStatusCode() + ' - ' + res.getBody()); } } else { throw new AuraHandledException('Access token expired and could not refresh'); } } if (res.getStatusCode() == 200) { Map resultMap = (Map) JSON.deserializeUntyped(res.getBody()); List files = (List) resultMap.get('value'); for (Object file : files) { Map fileDetails = (Map) file; Map fileData = new Map(); fileData.put('id', (String) fileDetails.get('id')); fileData.put('name', (String) fileDetails.get('name')); fileData.put('createdDateTime', (String) fileDetails.get('createdDateTime')); Map createdBy = (Map) fileDetails.get('createdBy'); if (createdBy != null && createdBy.containsKey('user')) { Map userMap = (Map) createdBy.get('user'); fileData.put('createdBy', (String) userMap.get('displayName')); } else { fileData.put('createdBy', 'Unknown'); } Map parentReference = (Map) fileDetails.get('parentReference'); fileData.put('parents', parentReference != null ? (String) parentReference.get('id') : 'No Parent'); fileData.put('url', fileDetails.containsKey('webUrl') ? (String) fileDetails.get('webUrl') : 'https://onedrive.live.com/?cid=' + fileData.get('id')); if (fileDetails.containsKey('folder')) { fileData.put('mimeType', 'folder'); fileData.put('iconName', 'doctype:folder'); } else { fileData.put('mimeType', 'file'); fileData.put('iconName', 'doctype:unknown'); } resultFiles.add(fileData); } result = OperationResult.success(resultFiles); if (accessTokenMap.containsKey('newAccessToken') || accessToken != (String) accessTokenMap.get('ACCESS_TOKEN')) { CloudStorageUtlilty.updateAccessToken(isServiceMode, userId,refreshToken, externalStorage ); } } else { FME_Logger.error('Failed to list OneDrive files: ' + res.getBody(), 'OneDriveFeature', 'listFiles'); result = OperationResult.error('Error listing files: ' + res.getBody()); } } catch (Exception e) { FME_Logger.error(e.getMessage(), 'OneDriveFeature' + e.getLineNumber(), 'listFiles'); result = OperationResult.error('Error listing files: ' + e.getMessage()); } System.debug('result: ' + result); return result; } }