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  }