github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/sawtooth-supply-chain-master/server/api/users.js (about) 1 /** 2 * Copyright 2017 Intel Corporation 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 * ---------------------------------------------------------------------------- 16 */ 17 'use strict' 18 19 const _ = require('lodash') 20 const db = require('../db/users') 21 const agents = require('../db/agents') 22 const auth = require('./auth') 23 const { BadRequest } = require('./errors') 24 25 const create = user => { 26 return Promise.resolve() 27 .then(() => { 28 return agents.fetch(user.publicKey, null) 29 .catch(() => { 30 throw new BadRequest('Public key must match an Agent on blockchain') 31 }) 32 }) 33 .then(() => auth.hashPassword(user.password)) 34 .then(hashed => { 35 return db.insert(_.assign({}, user, {password: hashed})) 36 .catch(err => { throw new BadRequest(err.message) }) 37 }) 38 .then(() => auth.createToken(user.publicKey)) 39 .then(token => ({ 40 authorization: token, 41 encryptedKey: user.encryptedKey || null 42 })) 43 } 44 45 const update = (changes, { authedKey }) => { 46 return Promise.resolve() 47 .then(() => { 48 if (changes.password) { 49 return auth.hashPassword(changes.password) 50 .then(hashed => _.set(changes, 'password', hashed)) 51 } 52 return changes 53 }) 54 .then(finalChanges => db.update(authedKey, finalChanges)) 55 .then(updated => _.omit(updated, 'password')) 56 } 57 58 module.exports = { 59 create, 60 update 61 }