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

119 lines
5.5 KiB
OpenEdge ABL

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<Map<String, String>> resultFiles = new List<Map<String, String>>();
Map<String, String> accessTokenMap = new Map<String, String>();
// 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<String, String> headers = new Map<String, String>{
'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<String, Object> resultMap = (Map<String, Object>) JSON.deserializeUntyped(res.getBody());
List<Object> files = (List<Object>) resultMap.get('value');
for (Object file : files) {
Map<String, Object> fileDetails = (Map<String, Object>) file;
Map<String, String> fileData = new Map<String, String>();
fileData.put('id', (String) fileDetails.get('id'));
fileData.put('name', (String) fileDetails.get('name'));
fileData.put('createdDateTime', (String) fileDetails.get('createdDateTime'));
Map<String, Object> createdBy = (Map<String, Object>) fileDetails.get('createdBy');
if (createdBy != null && createdBy.containsKey('user')) {
Map<String, Object> userMap = (Map<String, Object>) createdBy.get('user');
fileData.put('createdBy', (String) userMap.get('displayName'));
} else {
fileData.put('createdBy', 'Unknown');
}
Map<String, Object> parentReference = (Map<String, Object>) 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;
}
}