Skip to content

Commit

Permalink
Merge pull request #1621 from hollaex/beta
Browse files Browse the repository at this point in the history
Beta
  • Loading branch information
abeikverdi committed Aug 22, 2022
2 parents ac4db22 + 6c96278 commit 4d27137
Show file tree
Hide file tree
Showing 253 changed files with 20,269 additions and 3,915 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# HollaEx Kit [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/facebook/create-react-app/pulls)
HollaEx Kit is a while label crypto software suite with a range of features from exchange and trading to user management and onboarding as well as wallet system. In order to run the HollaEx Kit, you need to run the Server as the back-end and Web as your front-end user interface. HollaEx Kit runs as a stand alone node and for trading and blockchain functionalities require to connect to HollaEx Network. By default the node connects o the public HollaEx Network.
HollaEx Kit is an open source while label crypto software suite with a range of features from exchange and trading to user management and onboarding as well as wallet system. In order to run the HollaEx Kit, you need to run the Server as the back-end and Web as your front-end user interface. HollaEx Kit runs as a stand alone node and for trading and blockchain functionalities require to connect to HollaEx Network. By default the node connects o the public HollaEx Network.

## Get Started

Expand Down
204 changes: 191 additions & 13 deletions server/api/controllers/admin.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,14 @@ const { MAILTYPE } = require('../../mail/strings');
const { errorMessageConverter } = require('../../utils/conversion');
const { isDate } = require('moment');
const { isEmail } = require('validator');
const crypto = require('crypto');

const VERIFY_STATUS = {
EMPTY: 0,
PENDING: 1,
REJECTED: 2,
COMPLETED: 3
};

const getAdminKit = (req, res) => {
loggerAdmin.verbose(req.uuid, 'controllers/admin/getAdminKit', req.auth.sub);
Expand Down Expand Up @@ -914,13 +922,14 @@ const putMint = (req, res) => {
const {
transaction_id,
updated_transaction_id,
updated_address,
status,
rejected,
dismissed,
processing,
waiting,
email,
updated_description
description
} = req.swagger.params.data.value;

loggerAdmin.info(
Expand All @@ -939,8 +948,10 @@ const putMint = (req, res) => {
waiting,
'updated_transaction_id',
updated_transaction_id,
'updated_description',
updated_description
'updated_address',
updated_address,
'description',
description
);

toolsLib.wallet.updatePendingMint(transaction_id, {
Expand All @@ -950,8 +961,9 @@ const putMint = (req, res) => {
processing,
waiting,
updatedTransactionId: updated_transaction_id,
updatedAddress: updated_address,
email,
updatedDescription: updated_description,
updatedDescription: description,
additionalHeaders: {
'x-forwarded-for': req.headers['x-forwarded-for']
}
Expand Down Expand Up @@ -1055,6 +1067,7 @@ const putBurn = (req, res) => {
const {
transaction_id,
updated_transaction_id,
updated_address,
status,
rejected,
dismissed,
Expand All @@ -1080,6 +1093,8 @@ const putBurn = (req, res) => {
waiting,
'updated_transaction_id',
updated_transaction_id,
'updated_address',
updated_address,
'updated_description',
updated_description
);
Expand All @@ -1091,6 +1106,7 @@ const putBurn = (req, res) => {
processing,
waiting,
updatedTransactionId: updated_transaction_id,
updatedAddress: updated_address,
email,
updatedDescription: updated_description,
additionalHeaders: {
Expand Down Expand Up @@ -1144,18 +1160,18 @@ const postKitUserMeta = (req, res) => {

const getEmail = (req, res) => {
loggerAdmin.verbose(req.uuid, 'controllers/admin/getEmail', req.auth.sub);
const { language, type} = req.swagger.params;
const { language, type } = req.swagger.params;
try {
const data = cloneDeep({
email: toolsLib.getEmail()
});

return res.json(data["email"][language.value][type.value.toUpperCase()]);
return res.json(data['email'][language.value][type.value.toUpperCase()]);
} catch (err) {
loggerAdmin.error(req.uuid, 'controllers/admin/getEmail', err.message);
return res.status(err.statusCode || 400).json({ message: errorMessageConverter(err) });
}
}
};


const putEmail = (req, res) => {
Expand All @@ -1165,7 +1181,7 @@ const putEmail = (req, res) => {
const data = cloneDeep({
email: toolsLib.getEmail()
});
data["email"][language][type.toUpperCase()] = {html, title};
data['email'][language][type.toUpperCase()] = { html, title };
toolsLib.updateEmail(data)
.then(() => {
return res.status(201).json({ message: 'Success' });
Expand All @@ -1176,7 +1192,7 @@ const putEmail = (req, res) => {
return res.status(err.statusCode || 400).json({ message: errorMessageConverter(err) });
});

}
};

const getEmailTypes = (req, res) => {
loggerAdmin.verbose(req.uuid, 'controllers/admin/getEmailTypes', req.auth.sub);
Expand All @@ -1186,20 +1202,20 @@ const getEmailTypes = (req, res) => {
email: toolsLib.getEmail()
});

let arrMailType = Object.keys(data["email"][LANGUAGE_DEFAULT]);
let arrMailType = Object.keys(data['email'][LANGUAGE_DEFAULT]);
arrMailType.sort((a, b) => {
if(a < b) { return -1; }
if(a > b) { return 1; }
return 0;
})
});

return res.status(201).json(arrMailType);

} catch (err) {
loggerAdmin.error(req.uuid, 'controllers/admin/getEmailTypes', err.message);
return res.status(err.statusCode || 400).json({ message: errorMessageConverter(err) });
}
}
};

const putKitUserMeta = (req, res) => {
loggerAdmin.verbose(req.uuid, 'controllers/admin/putKitUserMeta', req.auth.sub);
Expand Down Expand Up @@ -1565,6 +1581,7 @@ const updateCoin = (req, res) => {
allow_deposit: allowDeposit,
allow_withdrawal: allowWithdrawal,
withdrawal_fees: withdrawalFees,
deposit_fees: depositFees,
is_public: isPublic,
description
} = req.swagger.params.data.value;
Expand Down Expand Up @@ -1602,6 +1619,8 @@ const updateCoin = (req, res) => {
allowWithdrawal,
'withdrawal_fees:',
withdrawalFees,
'deposit_fees:',
depositFees,
'is_public:',
isPublic,
'description:',
Expand All @@ -1626,6 +1645,7 @@ const updateCoin = (req, res) => {
allowDeposit,
allowWithdrawal,
withdrawalFees,
depositFees,
isPublic
},
{
Expand Down Expand Up @@ -1873,6 +1893,161 @@ const emailConfigTest = (req, res) => {
});
};

const setUserBank = (req, res) => {

const { bank_account } = req.swagger.params.data.value;
const id = req.swagger.params.id.value;

loggerAdmin.verbose(
req.uuid,
'controllers/admin/setUserBank auth',
req.auth,
id,
bank_account
);

toolsLib.user.getUserByKitId(id, false)
.then(async (user) => {
if (!user) {
throw new Error('User not found');
}

const existingBankAccounts = user.bank_account;

let sendEmail = false;

const newBankAccounts = bank_account.map((bank) => {
let existingBank = existingBankAccounts.filter((b) => b.id === bank.id);
existingBank = existingBank[0];

if (existingBank) {
return bank;
} else {
sendEmail = true;
bank.id = crypto.randomBytes(8).toString('hex');
bank.status = VERIFY_STATUS.COMPLETED;
return bank;
}
});

const updatedUser = await user.update(
{ bank_account: newBankAccounts },
{ fields: ['bank_account'] }
);

if (sendEmail) {
try {
toolsLib.sendEmail('BANK_VERIFIED', updatedUser.email, { bankAccounts: updatedUser.bank_account.filter((account) => account.status === VERIFY_STATUS.COMPLETED ) }, updatedUser.settings);
} catch (err) {
loggerAdmin.error(req.uuid, 'controllers/admin/setUserBank err', err.message);
}
}

return res.json(updatedUser.bank_account);
})
.catch((err) => {
loggerAdmin.error(
req.uuid,
'controllers/admin/setUserBank err',
err.message
);
return res.status(err.statusCode || 400).json({ message: errorMessageConverter(err) });
});
};

const verifyUserBank = (req, res) => {

const { user_id, bank_id } = req.swagger.params.data.value;

loggerAdmin.verbose(
req.uuid,
'controllers/admin/verifyUserBank auth',
req.auth,
user_id,
bank_id
);

toolsLib.user.getUserByKitId(user_id, false)
.then((user) => {
if (!user) {
throw new Error('User not found');
}

const bank = user.bank_account.filter((bank) => bank.id === bank_id);

if (bank.length === 0) {
throw new Error('Bank not found');
} else if (bank[0].status === VERIFY_STATUS.COMPLETED) {
throw new Error('Bank is already verified');
}

const banks = user.bank_account.map((bank) => {
if (bank.id === bank_id) {
bank.status = VERIFY_STATUS.COMPLETED;
}
return bank;
});

return user.update(
{ bank_account: banks },
{ fields: ['bank_account'] }
);
})
.then((user) => {
try {
toolsLib.sendEmail('BANK_VERIFIED', user.email, { bankAccounts: user.bank_account.filter((account) => account.status === VERIFY_STATUS.COMPLETED ) }, user.settings);
} catch (err) {
loggerAdmin.error(req.uuid, 'controllers/admin/verifyUserBank email catch', err.message);
}
return res.json(user.bank_account);
})
.catch((err) => {
loggerAdmin.error(req.uuid, 'controllers/admin/verifyUserBank err', err.message);
return res.status(err.status || 400).json({ message: err.message });
});
};

const revokeUserBank = (req, res) => {
const { user_id, bank_id, message } = req.swagger.params.data.value;

loggerAdmin.verbose(
req.uuid,
'controllers/admin/revokeUserBank auth',
req.auth,
user_id,
bank_id,
message
);

toolsLib.user.getUserByKitId(user_id, false)
.then((user) => {
if (!user) {
throw new Error('User not found');
}

const bank = user.bank_account.filter((bank) => bank.id === bank_id);

if (bank.length === 0) {
throw new Error('Bank not found');
}

const newBanks = user.bank_account.filter((bank) => bank.id !== bank_id);

return user.update(
{ bank_account: newBanks },
{ fields: ['bank_account'] }
);
})
.then((user) => {
toolsLib.sendEmail('USER_VERIFICATION_REJECT', user.email, { type: 'bank', message }, user.settings);
return res.json(user.bank_account);
})
.catch((err) => {
loggerAdmin.error(req.uuid, 'controllers/admin/revokeUserBank err', err.message);
return res.status(err.status || 400).json({ message: err.message });
});
};

module.exports = {
createInitialAdmin,
getAdminKit,
Expand Down Expand Up @@ -1920,5 +2095,8 @@ module.exports = {
getEmail,
putEmail,
emailConfigTest,
getEmailTypes
getEmailTypes,
setUserBank,
verifyUserBank,
revokeUserBank
};
Loading

0 comments on commit 4d27137

Please sign in to comment.