409 lines
21 KiB
OpenEdge ABL
409 lines
21 KiB
OpenEdge ABL
// 5pm- 23oct..
|
|
|
|
|
|
public with sharing class OAuthTokenManager {
|
|
private static String adminTokenId;
|
|
|
|
// new: store OAuth tokens in HIC_FilesME__External_Token__c using Key__c as upsert key
|
|
public static void storeToken(Map<String, Object> tokenMap) {
|
|
System.debug('tokenMap '+ JSON.serializePretty(tokenMap));
|
|
HIC_FilesME__External_Token__c rec = new HIC_FilesME__External_Token__c();
|
|
try {
|
|
Boolean isAdminLevelCreds = Boolean.valueOf(tokenMap.get('HIC_FilesME__Is_Admin_level_Credentials__c'));
|
|
String userId = String.valueOf(tokenMap.get('HIC_FilesME__User__c'));
|
|
String provider = String.valueOf(tokenMap.get('HIC_FilesME__Provider__c'));
|
|
|
|
if(provider.equalsIgnoreCase('awss3')) {
|
|
String accessKey = String.valueOf(tokenMap.get('HIC_FilesME__Access_Key__c'));
|
|
String secretAccessKey = String.valueOf(tokenMap.get('HIC_FilesME__Secret_Access_Key__c'));
|
|
String region = String.valueOf(tokenMap.get('HIC_FilesME__Region__c'));
|
|
String bucketName = String.valueOf(tokenMap.get('HIC_FilesME__Bucket__c'));
|
|
|
|
rec.HIC_FilesME__Access_Key__c = accessKey;
|
|
rec.HIC_FilesME__Secret_Access_Key__c = secretAccessKey;
|
|
rec.HIC_FilesME__Region__c = region;
|
|
rec.HIC_FilesME__Bucket__c = bucketName;
|
|
}
|
|
else if(provider.equalsIgnoreCase('SFTP')){
|
|
String sftpUser = (String) String.valueOf(tokenMap.get('HIC_FilesME__username__c'));
|
|
String hostname = (String) String.valueOf(tokenMap.get('HIC_FilesME__Hostname__c'));
|
|
String password = (String) String.valueOf(tokenMap.get('HIC_FilesME__Password__c'));
|
|
|
|
rec.HIC_FilesME__username__c = sftpUser;
|
|
rec.HIC_FilesME__Hostname__c = hostname;
|
|
rec.HIC_FilesME__Password__c = password;
|
|
}
|
|
|
|
// Extract inputs (expecting raw values in tokenMap)
|
|
String accessToken = String.valueOf(tokenMap.get('HIC_FilesME__Access_Token__c'));
|
|
String refreshToken = String.valueOf(tokenMap.get('HIC_FilesME__Refresh_Token__c'));
|
|
String tokenType = String.valueOf(tokenMap.get('HIC_FilesME__Token_Type__c'));
|
|
String scope = String.valueOf(tokenMap.get('HIC_FilesME__Scope__c'));
|
|
String instanceUrl = String.valueOf(tokenMap.get('HIC_FilesME__API_Endpoint_URL__c'));
|
|
String connectedUsername = String.valueOf(tokenMap.get('HIC_FilesME__Connected_Username__c'));
|
|
String tenantId = String.valueOf(tokenMap.get('HIC_FilesME__TenantId__c'));
|
|
String accountId = String.valueOf(tokenMap.get('HIC_FilesME__AccountId__c'));
|
|
Datetime expiresAt = null;
|
|
if (tokenMap != null && tokenMap.containsKey('HIC_FilesME__Expires_At__c')) {
|
|
Object exp = tokenMap.get('HIC_FilesME__Expires_At__c');
|
|
if (exp instanceof Datetime) {
|
|
expiresAt = (Datetime)exp;
|
|
} else if (exp != null) {
|
|
// supports seconds epoch or ISO string if caller passes string
|
|
String expStr = String.valueOf(exp);
|
|
try {
|
|
expiresAt = Datetime.valueOf(expStr);
|
|
} catch (Exception ignore) {
|
|
// If epoch seconds provided
|
|
try {
|
|
Long epoch = Long.valueOf(expStr);
|
|
expiresAt = Datetime.newInstance(1970,1,1,0,0,0).addSeconds((Integer)epoch);
|
|
} catch (Exception e2) { /* ignore */ }
|
|
}
|
|
}
|
|
}
|
|
|
|
// Basic validation
|
|
if (String.isBlank(provider)) {
|
|
FME_Logger.error('Missing provider in storeToken', 'OauthTokenManager', 'storeToken');
|
|
return;
|
|
}
|
|
String principalType = isAdminLevelCreds == true ? 'SERVICE' : 'USER';
|
|
|
|
// Compose unique Key__c: Provider|PrincipalType|UserId (UserId blank for SERVICE)
|
|
String compositeKey = provider + '|' + principalType + '|' + (principalType == 'USER' ? userId : '');
|
|
|
|
// FLS/CRUD checks on External_Token__c
|
|
// if (!Schema.sObjectType.HIC_FilesME__External_Token__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.isUpdateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.Key__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.Provider__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.PrincipalType__c.isCreateable()) {
|
|
// FME_Logger.info('Insufficient FLS/CRUD to upsert External_Token__c','OauthTokenManager','storeToken');
|
|
// return;
|
|
// }
|
|
|
|
// Build record for upsert by Key__c
|
|
rec.HIC_FilesME__Key__c = compositeKey;
|
|
rec.HIC_FilesME__Provider__c = provider;
|
|
rec.HIC_FilesME__Principal_Type__c = principalType;
|
|
// rec.HIC_FilesME__User__c = principalType.containsIgnoreCase('USER') ? userId : null;
|
|
rec.HIC_FilesME__User__c = userId;
|
|
rec.HIC_FilesME__Is_Admin_level_Credentials__c = isAdminLevelCreds;
|
|
|
|
|
|
// Optional metadata
|
|
rec.HIC_FilesME__Instance_URL__c = instanceUrl;
|
|
rec.HIC_FilesME__Tenant_Id__c = tenantId;
|
|
//rec.AccountId__c = accountId;
|
|
|
|
// Token payload (store carefully; consider encryption upstream)
|
|
rec.HIC_FilesME__Access_Token__c = accessToken;
|
|
rec.HIC_FilesME__Refresh_Token__c = refreshToken;
|
|
rec.HIC_FilesME__Token_Type__c = tokenType;
|
|
rec.HIC_FilesME__Scope__c = scope;
|
|
rec.HIC_FilesME__Expires_At__c = expiresAt;
|
|
rec.HIC_FilesME__Connected_Username__c = connectedUsername != null ? connectedUsername : null;
|
|
|
|
// Friendly notes (mask or omit secrets)
|
|
rec.HIC_FilesME__Notes__c = connectedUsername != null ? 'Connected as: ' + connectedUsername : null;
|
|
|
|
// Upsert by external id Key__c
|
|
System.debug('data before upsert:-> '+ JSON.serialize(rec));
|
|
upsert rec HIC_FilesME__Key__c;
|
|
|
|
FME_Logger.info('Stored token for ' + compositeKey, 'OauthTokenManager','storeToken');
|
|
} catch (Exception e) {
|
|
FME_Logger.error(e.getMessage(), 'OauthTokenManager ' + e.getLineNumber(), 'storeToken');
|
|
} finally {
|
|
FME_Logger.saveLog();
|
|
}
|
|
}
|
|
|
|
|
|
//old
|
|
// public static void storeToken(Map<String, Object> tokenMap) {
|
|
// try {
|
|
// Boolean isAdminLevelCreds = Boolean.valueOf(tokenMap.get('HIC_FilesME__Is_Admin_level_Credentials__c'));
|
|
// String externalStorageType = String.valueOf(tokenMap.get('HIC_FilesME__Provider__c'));
|
|
|
|
// if( !Schema.sObjectType.HIC_FilesME__External_Token__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Auth_Provider_Name__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Provider__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Refresh_Token__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Access_Token__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__User__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Is_Admin_level_Credentials__c.isCreateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__API_Endpoint_URL__c.isCreateable()
|
|
// ) {
|
|
// // throw new AuraHandledException('Cannot upsert. No create permission.');
|
|
// return;
|
|
// }
|
|
// if( !Schema.sObjectType.HIC_FilesME__External_Token__c.isUpdateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Auth_Provider_Name__c.isUpdateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Provider__c.isUpdateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Refresh_Token__c.isUpdateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Access_Token__c.isUpdateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__User__c.isUpdateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Is_Admin_level_Credentials__c.isUpdateable()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__API_Endpoint_URL__c.isCreateable()
|
|
// ) {
|
|
// // throw new AuraHandledException('Cannot upsert. No update permission.');
|
|
// return;
|
|
// }
|
|
|
|
// HIC_FilesME__External_Token__c tokenRecord = new HIC_FilesME__External_Token__c();
|
|
|
|
// tokenRecord.Name = externalStorageType +'-'+ generateRandomString(10);
|
|
// if (isAdminLevelCreds && doesAdminTokenExists(externalStorageType)) {
|
|
// tokenRecord.Id = adminTokenId;
|
|
// }
|
|
// // tokenRecord.HIC_FilesME__Access_Token__c = String.valueOf(tokenMap.get('HIC_FilesME__Access_Token__c'));
|
|
// String accessToken= String.valueOf(tokenMap.get('HIC_FilesME__Access_Token__c'));
|
|
|
|
// tokenRecord.HIC_FilesME__Connected_Username__c = String.valueOf(tokenMap.get('HIC_FilesME__Connected_Username__c'));
|
|
// tokenRecord.HIC_FilesME__Auth_Provider_Name__c = String.valueOf(tokenMap.get('HIC_FilesME__Auth_Provider_Name__c'));
|
|
// tokenRecord.HIC_FilesME__Provider__c = externalStorageType;
|
|
// tokenRecord.HIC_FilesME__Refresh_Token__c = String.valueOf(tokenMap.get('HIC_FilesME__Refresh_Token__c'));
|
|
// tokenRecord.HIC_FilesME__User__c = String.valueOf(tokenMap.get('HIC_FilesME__User__c'));
|
|
// tokenRecord.HIC_FilesME__Is_Admin_level_Credentials__c = isAdminLevelCreds;
|
|
// tokenRecord.HIC_FilesME__API_Endpoint_URL__c = String.valueOf(tokenMap.get('HIC_FilesME__API_Endpoint_URL__c'));
|
|
// tokenRecord.HIC_FilesME__Access_Token__c = accessToken;
|
|
|
|
|
|
// System.debug('>>> externalStorageType: ' + externalStorageType);
|
|
// System.debug('>>> isAdminCred: ' + isAdminLevelCreds);
|
|
// System.debug('>>> userId: ' + String.valueOf(tokenMap.get('HIC_FilesME__User__c')));
|
|
// System.debug('>>> tokenRecord before upsert: ' + JSON.serialize(tokenRecord));
|
|
// // System.debug('###tokenRecord: ' + tokenRecord);
|
|
// upsert tokenRecord;
|
|
// System.debug('###tokenRecord: ' + tokenRecord);
|
|
// }
|
|
// catch (Exception e) {
|
|
// // throw new AuraHandledException(e.getMessage());
|
|
// // return;
|
|
// system.debug('exception231>>>'+e.getMessage());
|
|
// FME_Logger.error(e.getMessage(), 'OauthTokenManager' + e.getLineNumber(), 'storeToken');
|
|
|
|
// } finally{
|
|
// FME_Logger.saveLog();
|
|
// }
|
|
// }
|
|
|
|
//this used for custom object
|
|
public static Boolean doesAdminTokenExists(String externalStorage) {
|
|
Boolean exists = false;
|
|
try {
|
|
List<HIC_FilesME__External_Token__c> settingsList = [
|
|
SELECT Id, HIC_FilesME__Provider__c,HIC_FilesME__Connected_Username__c, HIC_FilesME__Is_Admin_level_Credentials__c
|
|
FROM HIC_FilesME__External_Token__c
|
|
WHERE HIC_FilesME__Provider__c = :externalStorage
|
|
AND HIC_FilesME__Is_Admin_level_Credentials__c = true
|
|
LIMIT 1
|
|
];
|
|
|
|
if (!settingsList.isEmpty()) {
|
|
adminTokenId = settingsList[0].Id;
|
|
exists = true;
|
|
}
|
|
} catch(Exception e) {
|
|
FME_Logger.error(e.getMessage(), 'OauthTokenManager' + e.getLineNumber(), 'doesAdminTokenExists');
|
|
exists = false;
|
|
}
|
|
|
|
return exists;
|
|
}
|
|
|
|
|
|
|
|
@AuraEnabled
|
|
public static Map<String, Map<String, Object>> getAllAdminTokens() {
|
|
Map<String, Map<String, Object>> allAdminTokenMap = new Map<String, Map<String, Object>>();
|
|
try {
|
|
// if( !Schema.sObjectType.HIC_FilesME__External_Token__c.isAccessible()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__User__c.isAccessible()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Provider__c.isAccessible()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.CreatedDate.isAccessible()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Access_Token__c.isAccessible()
|
|
// || !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Is_Admin_level_Credentials__c.isAccessible() ){
|
|
// // throw new auraHandledException('Insufficient permission');
|
|
// System.debug('Insufficient permission');
|
|
// return null;
|
|
// }
|
|
|
|
List<HIC_FilesME__External_Token__c> adminTokenList = [
|
|
SELECT Id,HIC_FilesME__Connected_Username__c, HIC_FilesME__Provider__c, CreatedDate, HIC_FilesME__Access_Token__c
|
|
FROM HIC_FilesME__External_Token__c
|
|
WHERE HIC_FilesME__Is_Admin_level_Credentials__c = true
|
|
WITH USER_MODE
|
|
LIMIT 999
|
|
];
|
|
|
|
System.debug('>>> adminTokenList: ' + JSON.serialize(adminTokenList));
|
|
List<String> allExternalStorageType = new List<String>();
|
|
allExternalStorageType.add('GoogleDrive');
|
|
allExternalStorageType.add('SharePoint');
|
|
allExternalStorageType.add('OneDrive');
|
|
allExternalStorageType.add('Dropbox');
|
|
allExternalStorageType.add('Box');
|
|
|
|
for (String externalStorageType : allExternalStorageType){
|
|
Map<String, Object> tokenMap = new Map<String, Object>();
|
|
tokenMap.put('adminTokenExists', false);
|
|
allAdminTokenMap.put(externalStorageType, tokenMap);
|
|
}
|
|
for (HIC_FilesME__External_Token__c token : adminTokenList){
|
|
DateTime myDateTime = token.CreatedDate;
|
|
String formattedDate = myDateTime.format('MMM dd, yyyy');
|
|
Map<String, Object> tokenMap = new Map<String, Object>();
|
|
// changes take user name from the connected googledrive
|
|
// // tokenMap.put('HIC_FilesME__Username__c', '');
|
|
tokenMap.put('HIC_FilesME__Connected_Username__c', token.HIC_FilesME__Connected_Username__c);
|
|
tokenMap.put('Expiry date', '');
|
|
tokenMap.put('ConnectedDate', formattedDate);
|
|
tokenMap.put('accessToken', token.HIC_FilesME__Access_Token__c);
|
|
tokenMap.put('HIC_FilesME__Provider__c', token.HIC_FilesME__Provider__c);
|
|
tokenMap.put('adminTokenExists', true);
|
|
if (token.HIC_FilesME__Provider__c == 'Google Drive' || token.HIC_FilesME__Provider__c == 'GoogleDrive') {
|
|
allAdminTokenMap.put('GoogleDrive', tokenMap);
|
|
} else {
|
|
allAdminTokenMap.put(token.HIC_FilesME__Provider__c, tokenMap);
|
|
}
|
|
}
|
|
System.debug('allAdminTokenMap' + allAdminTokenMap);
|
|
} catch (Exception e) {
|
|
// throw new AuraHandledException('Exception: '+ ex.getMessage());
|
|
FME_Logger.error(e.getMessage(), 'OauthTokenManager' + e.getLineNumber(), 'getAllAdminTokens');
|
|
// return null;
|
|
}
|
|
finally {
|
|
FME_Logger.saveLog();
|
|
}
|
|
System.debug('allAdminTokenMap:-> '+ allAdminTokenMap);
|
|
return allAdminTokenMap;
|
|
}
|
|
|
|
|
|
|
|
|
|
@AuraEnabled
|
|
public static List<HIC_FilesME__External_Token__c> fetchExternalAuthCredRecord(Id userId){
|
|
List<HIC_FilesME__External_Token__c> configs = new List<HIC_FilesME__External_Token__c>();
|
|
|
|
try {
|
|
if (!Schema.sObjectType.HIC_FilesME__External_Token__c.isAccessible()
|
|
|| !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__User__c.isAccessible()
|
|
|| !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Provider__c.isAccessible()
|
|
|| !Schema.sObjectType.HIC_FilesME__External_Token__c.fields.HIC_FilesME__Is_Admin_level_Credentials__c.isAccessible()) {
|
|
|
|
FME_Logger.info('Insufficient permissions for ExternalServiceConfig','OauthTokenManager','fetchExternalAuthCredRecord');
|
|
configs = null;
|
|
} else {
|
|
configs = [
|
|
SELECT Id,
|
|
HIC_FilesME__Provider__c,
|
|
HIC_FilesME__Is_Admin_level_Credentials__c
|
|
FROM HIC_FilesME__External_Token__c
|
|
WHERE HIC_FilesME__Is_Admin_level_Credentials__c = false
|
|
AND HIC_FilesME__User__c = :userId
|
|
WITH USER_MODE
|
|
LIMIT 999
|
|
];
|
|
|
|
FME_Logger.info('Fetched ' + configs.size() + ' ExternalServiceConfig record(s) for user ' + userId,'OauthTokenManager','fetchExternalAuthCredRecord');
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
FME_Logger.error(e.getMessage(), 'OauthTokenManager' + e.getLineNumber(), 'fetchExternalAuthCredRecord');
|
|
// configs = null;
|
|
} finally {
|
|
FME_Logger.saveLog();
|
|
}
|
|
|
|
return configs;
|
|
}
|
|
|
|
@AuraEnabled
|
|
public static String fetchServiceAccountRecord() {
|
|
String result;
|
|
try {
|
|
List<HIC_FilesME__FileMadeEasySetting__c> settingRecordList = [
|
|
SELECT Id
|
|
FROM HIC_FilesME__FileMadeEasySetting__c
|
|
];
|
|
result = settingRecordList.size() >= 1 ? 'record found' : 'null';
|
|
FME_Logger.info( 'Service-account check: ' + result, 'OauthTokenManager','fetchServiceAccountRecord');
|
|
|
|
} catch (Exception e) {
|
|
FME_Logger.error(e.getMessage(), 'OauthTokenManager' + e.getLineNumber(), 'fetchServiceAccountRecord');
|
|
throw new AuraHandledException(e.getMessage());
|
|
} finally {
|
|
FME_Logger.saveLog();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
public static String generateRandomString(Integer len){
|
|
String result = '';
|
|
try {
|
|
String chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz';
|
|
while (result.length() < len) {
|
|
Integer idx = Math.mod(Math.abs(Crypto.getRandomInteger()), chars.length());
|
|
result += chars.substring(idx, idx + 1);
|
|
}
|
|
} catch (Exception e){
|
|
FME_Logger.error(e.getMessage(), 'OauthTokenManager' + e.getLineNumber(), 'generateRandomString');
|
|
result = '';
|
|
}
|
|
return result;
|
|
}
|
|
|
|
@AuraEnabled
|
|
public static Boolean orgSandBoxOrProduction() {
|
|
Boolean result = null;
|
|
|
|
try {
|
|
if (!Schema.sObjectType.Organization.isAccessible()
|
|
|| !Schema.sObjectType.Organization.fields.TrialExpirationDate.isAccessible()
|
|
|| !Schema.sObjectType.Organization.fields.IsSandbox.isAccessible()
|
|
|| !Schema.sObjectType.Organization.fields.Name.isAccessible()) {
|
|
result = null;
|
|
} else {
|
|
Organization orgRecord = [
|
|
SELECT Id, TrialExpirationDate, IsSandbox, Name
|
|
FROM Organization
|
|
WITH USER_MODE
|
|
LIMIT 1
|
|
];
|
|
System.debug('orgRecord: ' + orgRecord);
|
|
result = !orgRecord.IsSandbox;
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
FME_Logger.error(e.getMessage(), 'OauthTokenManager' + e.getLineNumber(), 'orgSandBoxOrProduction');
|
|
throw new AuraHandledException(e.getMessage());
|
|
|
|
} finally {
|
|
FME_Logger.saveLog();
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
@AuraEnabled
|
|
public static Boolean hasUserPermission(String permissionName) {
|
|
Boolean result = false;
|
|
|
|
try {
|
|
result = FeatureManagement.checkPermission(permissionName);
|
|
|
|
FME_Logger.info('Permission "' + permissionName + '" = ' + result,'OauthTokenManager','hasUserPermission');
|
|
} catch (Exception e) {
|
|
FME_Logger.error(e.getMessage(), 'OauthTokenManager' + e.getLineNumber(), 'hasUserPermission');
|
|
} finally {
|
|
FME_Logger.saveLog();
|
|
}
|
|
|
|
return result;
|
|
}
|
|
} |