198 lines
7.6 KiB
OpenEdge ABL
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
|
|
|
|
|
|
|
|
} |