github.com/muhammedhassanm/blockchain@v0.0.0-20200120143007-697261defd4d/build-blockchain-insurance-app-master/web/www/routers/shop.router.js (about)

     1  'use strict';
     2  
     3  import express from 'express';
     4  
     5  import * as ShopPeer from '../blockchain/shopPeer';
     6  
     7  const router = express.Router();
     8  
     9  router.get('/', (req, res) => {
    10    res.render('shop-main', { shopActive: true });
    11  });
    12  
    13  router.get('/login', (req, res) => {
    14    res.render('login', { shopActive: true });
    15  });
    16  
    17  router.post('/api/contract-types', async (req, res) => {
    18    if (typeof req.body !== 'object') {
    19      res.json(null);
    20    }
    21    let letter;
    22    switch ((req.body.shopType || '').toLowerCase()) {
    23      case 'bikes':
    24        letter = 'B';
    25        break;
    26      case 'smart-phones':
    27        letter = 'P';
    28        break;
    29      case 'skis':
    30        letter = 'S';
    31        break;
    32      default:
    33        letter = '';
    34        break;
    35    }
    36  
    37    let contractTypes;
    38    try {
    39      contractTypes = await ShopPeer.getContractTypes(letter);
    40    } catch (e) {
    41      console.log(e);
    42      res.json({ error: "Could not retrieve contract types!" });
    43    }
    44  
    45    if (!Array.isArray(contractTypes)) {
    46      res.json({ error: "Could not retrieve contract types!" });
    47    }
    48    res.json(
    49      contractTypes.map(contractType => {
    50        let mapped = Object.assign({}, contractType);
    51        delete mapped.shopType;
    52        return mapped;
    53      }));
    54  });
    55  
    56  router.post('/api/request-user', async (req, res) => {
    57    let { user } = req.body;
    58    let { firstName, lastName, email } = user || {};
    59    if (typeof user === 'object' &&
    60      typeof firstName === 'string' &&
    61      typeof lastName === 'string' &&
    62      typeof email === 'string') {
    63  
    64      let passwordProposal = generatePassword();
    65      try {
    66        let responseUser = await ShopPeer.createUser({
    67          username: email,
    68          firstName: firstName,
    69          lastName: lastName,
    70          password: passwordProposal
    71        });
    72        res.json(responseUser || { username: email, password: passwordProposal });
    73      } catch (e) {
    74        console.log(e);
    75        res.json({ error: 'Could not create new user!' });
    76      }
    77    } else {
    78      res.json({ error: 'Invalid request!' });
    79    }
    80  });
    81  
    82  router.post('/api/enter-contract', async (req, res) => {
    83    let { user, contractTypeUuid, additionalInfo } = req.body;
    84    if (typeof user === 'object' &&
    85      typeof contractTypeUuid === 'string' &&
    86      typeof additionalInfo === 'object') {
    87      try {
    88        let { username, firstName, lastName } = user;
    89        const passwordProposal = generatePassword();
    90        let loginInfo = await ShopPeer.createContract({
    91          contractTypeUuid,
    92          username,
    93          password: passwordProposal,
    94          firstName,
    95          lastName,
    96          item: additionalInfo.item,
    97          startDate: additionalInfo.startDate,
    98          endDate: additionalInfo.endDate
    99        });
   100        res.json({ success: 'Contract signed.', loginInfo });
   101      } catch (e) {
   102        console.log(e);
   103        res.json({ error: 'Could not create new contract!' });
   104      }
   105    } else {
   106      res.json({ error: 'Invalid request!' });
   107    }
   108  });
   109  
   110  router.post('/api/blocks', async (req, res) => {
   111    const { noOfLastBlocks } = req.body;
   112    if (typeof noOfLastBlocks !== 'number') {
   113      res.json({ error: 'Invalid request' });
   114    }
   115    try {
   116      const blocks = await ShopPeer.getBlocks(noOfLastBlocks);
   117      res.json(blocks);
   118    } catch (e) {
   119      res.json({ error: 'Error accessing blockchain.' });
   120    }
   121  });
   122  
   123  router.get('*', (req, res) => {
   124    res.render('shop', {
   125      shopActive: true,
   126      bikesActive: req.originalUrl.includes('bikes'),
   127      smartPhonesActive: req.originalUrl.includes('smart-phones'),
   128      skisActive: req.originalUrl.includes('skis')
   129    });
   130  });
   131  
   132  function generatePassword() {
   133    let passwordType = Math.floor(Math.random() * 4);
   134    let password;
   135    switch (passwordType) {
   136      case 0:
   137        password = 'test';
   138        break;
   139      case 1:
   140        password = 'demo';
   141        break;
   142      case 2:
   143        password = 'pass';
   144        break;
   145      case 3:
   146        password = 'secret';
   147        break;
   148      case 4:
   149      default:
   150        password = 'qwerty';
   151    }
   152    password += Math.floor(Math.random() * (99 - 10) + 10);
   153    return password;
   154  }
   155  
   156  function wsConfig(io) {
   157    ShopPeer.on('block', block => { io.emit('block', block); });
   158  }
   159  
   160  export default router;
   161  export { wsConfig };