Advertisement
Guest User

Untitled

a guest
Apr 24th, 2019
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.16 KB | None | 0 0
  1. // Code for OnPrem module for SIH 2019
  2.  
  3. /*
  4. * Developer: Soham Dutta
  5. * Maintainer: Shivam Gangwar
  6. * Date: 16 Feb 2019
  7. */
  8.  
  9. var storage = require('node-persist');
  10.  
  11. //just replace this call with our security algorithm
  12. var crypto = require("crypto");
  13.  
  14. var sha1 = require('sha1');
  15.  
  16. const myStorage = storage.create({dir: 'myDir', ttl: 3000});
  17.  
  18. await myStorage.init();
  19. //allow for variable storage --> security feature
  20. //storage.initSync();
  21.  
  22.  
  23.  
  24. function getIds(masterPassword){
  25. let domains = storage.keys();
  26. let accounts = [];
  27. for (var i = 0; i < domains.length; i++) {
  28. let tempAccounts = getAccounts(domains[i],masterPassword);
  29.  
  30. for (var j = 0; j < tempAccounts.length; j++) {
  31. accounts.push({domain:tempAccounts[j].name, id:tempAccounts[j].username, securityLevel: 0});
  32. }
  33. }
  34. return accounts;
  35. }
  36.  
  37.  
  38. function getCredentials(name,username,masterPassword){
  39. let account = [];
  40. let Accounts = getAccounts(name,masterPassword);
  41. for (var j = 0; j < Accounts.length; j++) {
  42. if(Accounts[j].username === username){
  43. account.push({domain:Accounts[j].name, id:Accounts[j].username,password:Accounts[j].password, securityLevel: 0 });
  44. }
  45. }
  46. return account;
  47. }
  48.  
  49. function getAccounts(accountName,masterPassword){
  50. var encryptedAccounts = storage.getItemSync(accountName);
  51. var accounts = [];
  52. if(typeof encryptedAccounts !== 'undefined'){
  53. try{
  54. let cipher = crypto.createDecipher('aes-256-cbc', masterPassword);
  55. let decryptedAccounts = cipher.update(encryptedAccounts, 'hex', 'utf8') + cipher.final('utf8');
  56. accounts = JSON.parse(decryptedAccounts);
  57. }catch(exception){
  58. throw exception;
  59. }
  60. }
  61. return accounts;
  62. }
  63.  
  64. function getIdsForDomain(domain,masterPassword){
  65. var encryptedAccounts = storage.getItemSync(domain);
  66. var accounts = [];
  67. if(typeof encryptedAccounts !== 'undefined'){
  68. try{
  69. let cipher = crypto.createDecipher('aes-256-cbc', masterPassword);
  70. let decryptedAccounts = cipher.update(encryptedAccounts, 'hex', 'utf8') + cipher.final('utf8');
  71. accounts = JSON.parse(decryptedAccounts);
  72. }catch(exception){
  73. throw new Error(exception.message);
  74. }
  75. }
  76. let returningAccount = [];
  77. for (let index = 0; index < accounts.length; index++) {
  78. const element = accounts[index];
  79. returningAccount.push({domain:element.name, id:element.username, password:element.password, securityLevel:1});
  80. }
  81. return returningAccount;
  82. }
  83.  
  84.  
  85.  
  86. function saveAccounts(accountName, accounts, masterPassword){
  87. try {
  88. var cipher = crypto.createCipher('aes-256-cbc', masterPassword);
  89. var encrypted = cipher.update(JSON.stringify(accounts), 'utf8', 'hex') + cipher.final('hex');
  90. storage.setItemSync(accountName, encrypted);
  91. return accounts;
  92. } catch (e) {
  93. throw e;
  94. }
  95. }
  96.  
  97.  
  98. function saveId(domain,id,pass,masterPassword){
  99. try{
  100. var accounts = getAccounts(domain,masterPassword);
  101. var found = false;
  102. for(var i = 0; i < accounts.length; ++i){
  103. if(id === accounts[i].username){
  104. found = true;
  105. }
  106. }
  107. if(!found){
  108. account = {name:domain, username:id, password:pass};
  109. accounts.push(account);
  110. return saveAccounts(domain,accounts, masterPassword);
  111. }else{
  112. return accounts;
  113. }
  114. }catch(e){
  115. throw e;
  116. }
  117. }
  118.  
  119.  
  120. function changePasswordForId(domain, id, pass, masterPassword){
  121.  
  122. account = {name:domain, username:id, password:pass};
  123. try{
  124. let accounts = getAccounts(domain, masterPassword);
  125.  
  126. let found = 9999999;
  127. for(let i = 0; i < accounts.length; ++i){
  128. if(id === accounts[i].username){
  129. found = i;
  130. }
  131. }
  132. if(found<accounts.length){
  133. accounts.splice(found,1);
  134. accounts.push(account);
  135. return saveAccounts(domain,accounts,masterPassword);
  136. }else{
  137. return accounts;
  138. }
  139. }catch(e){
  140. throw new Error(e.message);
  141. }
  142. }
  143.  
  144. function deleteId(domain, username, masterPassword){
  145. try{
  146. let accounts = getAccounts(domain,masterPassword);
  147. let found = 999;
  148. for(let i = 0; i < accounts.length; ++i){
  149. if(username === accounts[i].username){
  150. found = i;
  151. }
  152. }
  153. if(found<accounts.length){
  154. accounts.splice(found,1);
  155. return saveAccounts(domain,accounts,masterPassword);
  156. }else{
  157. return accounts;
  158. }
  159. }catch(e){
  160. throw new Error(e.message);
  161. }
  162. }
  163.  
  164. function deleteAllAccount(domainName){
  165. try{
  166. fs.unlinkSync('persist/'+fileName)
  167. console.log(BgGreen+"[SUCCESS]"+Reset+'Domain Deleted!');
  168. }catch(err) {
  169. console.log(BgRed+"[ERROR]"+Reset+"Unable to delete the file from local directory!");
  170. }
  171. }
  172.  
  173. module.exports = {
  174. getIds,
  175. getCredentials,
  176. getAccounts,
  177. saveId,
  178. changePasswordForId,
  179. deleteId,
  180. getIdsForDomain,
  181. deleteAllAccount
  182. }
  183.  
  184.  
  185. saveId('facebook.com','user1@facebook.com','pass_f_user1','master@123');
  186.  
  187. console.log(getAccounts('facebook.com','master@123'))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement