119 lines
5.5 KiB
OpenEdge ABL
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;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |