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 };