flexbiz-server
Version:
Flexible Server
9 lines (8 loc) • 3.5 kB
JavaScript
'use strict';const {ec}=require("elliptic-nodejs"),EC=new ec("secp256k1"),walletSchema=new Schema({id_app:{type:String,required:!0,maxlength:1024},privateKey:{type:String,required:!0},publicKey:{type:String,required:!0},email:{type:String,required:!0,lowercase:!0},exfields:Schema.Types.Mixed,status:{type:Boolean,default:!0},date_created:{type:Date,default:Date.now},date_updated:{type:Date,default:Date.now},user_created:{type:String,default:""},user_updated:{type:String,default:""}});
(global.configs||{}).createIndexes&&(walletSchema.index({id_app:1,privateKey:1,email:1}),walletSchema.index({email:"text"}),walletSchema.index({status:1}),walletSchema.index({user_created:1,visible_to:1,visible_to_users:1}));const model=mongoose.models.wallet||mongoose.model("wallet",walletSchema),toHexString=$byteArray$$=>Array.from($byteArray$$,$byte$$=>("0"+($byte$$&255).toString(16)).slice(-2)).join("");
model.createWallet=async($id_app$$,$email$$)=>new Promise(($resolve$$,$reject$$)=>{model.findOne({id_app:$id_app$$,email:$email$$},($e$$,$rs$$)=>{if($e$$||$rs$$)return $reject$$(Error($e$$?$e$$.message:"This user has wallet"));try{let $privateKey$$=EC.genKeyPair().getPrivate().toString(16),$publicKey$$=model.getPublicKeyFromPrivateKey($privateKey$$);(new model({email:$email$$,privateKey:$privateKey$$,publicKey:$publicKey$$,id_app:$id_app$$})).save($e$$=>{if($e$$)return $reject$$(Error($e$$.message));
$resolve$$($privateKey$$)})}catch($e$$){console.error($e$$),$reject$$(Error($e$$.message))}})});model.getPrivateKey=async($id_app$$,$email$$)=>new Promise(($resolve$$,$reject$$)=>{model.findOne({id_app:$id_app$$,email:$email$$}).lean().exec(async($e$jscomp$0$$,$rs$$)=>{if($e$jscomp$0$$)return $reject$$(Error($e$jscomp$0$$.message));if($rs$$)return $resolve$$($rs$$.privateKey);try{let $privateKey$$=await model.createWallet($id_app$$,$email$$);$resolve$$($privateKey$$)}catch($e$$){$reject$$(Error($e$$.message))}})});
model.getPublicKey=async($id_app$$,$email$$)=>{var $privateKey$jscomp$2_publicKey$$=await model.getPrivateKey($id_app$$,$email$$);$privateKey$jscomp$2_publicKey$$=model.getPublicKeyFromPrivateKey($privateKey$jscomp$2_publicKey$$);await model.findOneAndUpdate({id_app:$id_app$$,email:$email$$},{publicKey:$privateKey$jscomp$2_publicKey$$});return $privateKey$jscomp$2_publicKey$$};model.getPublicKeyFromPrivateKey=$privateKey$$=>EC.keyFromPrivate($privateKey$$,"hex").getPublic().encode("hex");
model.getEmail=async($id_app$$,$publicKey$$)=>new Promise(($resolve$$,$reject$$)=>{model.findOne({id_app:$id_app$$,publicKey:$publicKey$$}).lean().exec(async($e$$,$rs$$)=>$e$$||!$rs$$?$reject$$(Error($e$$?$e$$.message:"\u0110\u1ecba ch\u1ec9 v\u00ed n\u00e0y kh\u00f4ng t\u1ed3n t\u1ea1i")):$resolve$$($rs$$.email))});
model.sign=async($id_app$$,$email$$,$dataToSign$$)=>{try{let $privateKey$$=await model.getPrivateKey($id_app$$,$email$$),$key$$=EC.keyFromPrivate($privateKey$$,"hex"),$msgHash$$=[JSON.stringify($dataToSign$$)];return toHexString($key$$.sign($msgHash$$).toDER())}catch($e$$){throw Error(`Can't sign data. Error: ${$e$$.message}`);}};
model.verifySignature=async($address_id_app$jscomp$5_key$$,$email$$,$data_msgHash$$,$signature$$)=>{$address_id_app$jscomp$5_key$$=await model.getPublicKey($address_id_app$jscomp$5_key$$,$email$$);$address_id_app$jscomp$5_key$$=EC.keyFromPublic($address_id_app$jscomp$5_key$$,"hex");$data_msgHash$$=[JSON.stringify($data_msgHash$$)];return $address_id_app$jscomp$5_key$$.verify($data_msgHash$$,$signature$$)};module.exports=model;