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

198 lines
7.6 KiB
OpenEdge ABL

public with sharing class SFTPFeature extends CloudStorageBase {
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>>();
System.debug('Inside listFiles');
try {
String user = 'Monika';
String hostname = '192.168.2.31';
String password = 'monika123';
String folderName = '/Monika';
String endpoint = 'https://hopelessly-upright-platypus.ngrok-free.app/api/v1/sftp';
System.debug('Endpoint: ' + endpoint);
Map<String, Object> payload = new Map<String, Object>{
'user' => user,
'hostname' => hostname,
'password' => password,
'encryptionType' => 'SFTP',
'folderName' => folderName
};
System.debug('Payload: ' + JSON.serializePretty(payload));
String requestBody = JSON.serialize(payload);
Map<String, String> headers = new Map<String, String>{
'Content-Type' => 'application/json'
};
HttpResponse res = CloudStorageUtlilty.makeCallout(requestBody, endpoint, headers, 'POST');
System.debug('Status Code: ' + res.getStatusCode());
System.debug('Response Body: ' + res.getBody());
if (res.getStatusCode() == 200) {
List<Object> fileList = (List<Object>) JSON.deserializeUntyped(res.getBody());
processItems(fileList, resultFiles);
} else {
throw new AuraHandledException('Error from SFTP service: ' + res.getBody());
}
} catch (Exception e) {
throw new AuraHandledException('Exception: ' + e.getMessage());
}
System.debug('Final resultFiles: ' + JSON.serializePretty(resultFiles));
return OperationResult.success(resultFiles);
}
private void processItems(List<Object> items, List<Map<String, String>> resultFiles) {
for (Object item : items) {
Map<String, Object> fileMap = (Map<String, Object>) item;
String type = (String) fileMap.get('type');
Boolean isFolder = type != null && type.toLowerCase() == 'folder';
String iconName = isFolder ? 'doctype:folder' : 'doctype:txt';
Map<String, String> fileData = new Map<String, String>{
'name' => (String) fileMap.get('name'),
'type' => (String) fileMap.get('type'),
'path' => (String) fileMap.get('path'),
'iconName' => iconName,
'isFolder' => String.valueOf(isFolder)
};
System.debug('fileData: ' + fileData);
resultFiles.add(fileData);
if (fileMap.get('type') == 'folder' && fileMap.containsKey('children')) {
List<Object> children = (List<Object>) fileMap.get('children');
if (children != null && !children.isEmpty()) {
processItems(children, resultFiles);
}
}
}
}
//to delete
public override OperationResult deleteFile(String fileId, Boolean isServiceMode, String userId) {
try {
System.debug('>>>entered deleteFile SFTP');
System.debug('>>>fileId=' + fileId + '>>>userId=' + userId + '>>>isServiceMode=' + isServiceMode);
String user = 'Monika';
String hostname = '192.168.2.31';
String password = 'monika123';
// String folderName = '/downloaded/sftp/New folder/';
String folderName = '';
String endpoint = 'https://hopelessly-upright-platypus.ngrok-free.app/api/v1/sftp';
Map<String, Object> sftpConnection = new Map<String, Object>{
'user' => user,
'hostname' => hostname,
'password' => password,
'encryptionType' => 'FTP',
'folderName' => folderName
};
Map<String, Object> requestBody = new Map<String, Object>{
'targetPaths' => new List<String>{ fileId },
'sftpConnection' => sftpConnection
};
String jsonBody = JSON.serialize(requestBody);
System.debug('Create Request Body: ' + jsonBody);
Map<String, String> headers = new Map<String, String>{
'Content-Type' => 'application/json',
'accept' => '*/*'
};
HttpResponse res = CloudStorageUtlilty.makeCallout(jsonBody, endpoint, headers, 'DELETE');
System.debug('>>>res=' + res.getBody());
System.debug('>>>res.getStatusCode()=' + res.getStatusCode());
if (res.getStatusCode() == 200 || res.getStatusCode() == 204) {
return OperationResult.success(res.getBody());
} else {
return OperationResult.error(res.getBody());
}
} catch (Exception e) {
System.debug('>>>error=' + e.getMessage());
throw new AuraHandledException(e.getMessage());
}
}
//to create
public override OperationResult createFolder(String parentFolderId, Boolean isServiceMode, String folderName, String userId) {
Map<String, Object> resultMap = new Map<String, Object>();
System.debug('resultMap' + resultMap);
System.debug('Inside createFolder');
System.debug('Inside createFolder' + parentFolderId + '>>>' + isServiceMode + '>>>' + folderName + '>>>' + userId);
try {
String user = 'Monika';
String hostname = '192.168.2.31';
String password = 'monika123';
String encryptionType = 'SFTP';
String encodedFolderName = EncodingUtil.urlEncode(folderName, 'UTF-8');
String path = String.isBlank(parentFolderId) ? '/Monika' : parentFolderId;
System.debug('>>>>path=' + path);
String encodedPath = EncodingUtil.urlEncode(path, 'UTF-8');
String endpoint = 'https://hopelessly-upright-platypus.ngrok-free.app/api/v1/sftp/folder' +
'?folderName=' + encodedFolderName +
'&path=' + encodedPath;
Map<String, Object> payload = new Map<String, Object>{
'user' => user,
'hostname' => hostname,
'password' => password,
'encryptionType' => encryptionType,
'folderName' => folderName
};
System.debug('Create Request Body: ' + JSON.serialize(payload));
String requestBody = JSON.serialize(payload);
Map<String, String> headers = new Map<String, String>{
'Content-Type' => 'application/json',
'accept' => '*/*'
};
HttpResponse res = CloudStorageUtlilty.makeCallout(requestBody, endpoint, headers, 'POST');
if (res.getStatusCode() != 200) {
return OperationResult.error('Error: ' + res.getStatusCode() + ' - ' + res.getBody());
}
String responseBody = res.getBody();
resultMap = (Map<String, Object>) JSON.deserializeUntyped(responseBody);
resultMap.put('code', '200');
return OperationResult.success(resultMap);
} catch (Exception e) {
throw new AuraHandledException('SFTP Folder Creation Failed: ' + e.getMessage());
}
}
//to upload
}