mirror of
				https://gitlab.com/MrFry/mrfrys-node-server
				synced 2025-04-01 20:24:18 +02:00 
			
		
		
		
	Added veteran pw request site, logging in prettying
This commit is contained in:
		| @@ -45,7 +45,7 @@ const dataEditsLog = 'stats/dataEdits' | |||||||
| const dailyDataCountFile = 'stats/dailyDataCount' | const dailyDataCountFile = 'stats/dailyDataCount' | ||||||
| const usersDbBackupPath = 'data/dbs/backup' | const usersDbBackupPath = 'data/dbs/backup' | ||||||
|  |  | ||||||
| const maxVeteranPwGetCount = 5 | const maxVeteranPwGetCount = 10 | ||||||
| const addPWPerDay = 3 // every x day a user can give a pw | const addPWPerDay = 3 // every x day a user can give a pw | ||||||
| const maxPWCount = 2 // maximum pw give opportunities a user can have at once | const maxPWCount = 2 // maximum pw give opportunities a user can have at once | ||||||
| const daysAfterUserGetsPWs = 2 // days after user gets pw-s | const daysAfterUserGetsPWs = 2 // days after user gets pw-s | ||||||
| @@ -151,7 +151,6 @@ function GetApp () { | |||||||
|   app.post('/getveteranpw', function (req, res) { |   app.post('/getveteranpw', function (req, res) { | ||||||
|     logger.LogReq(req) |     logger.LogReq(req) | ||||||
|     const ip = req.headers['cf-connecting-ip'] || req.connection.remoteAddress |     const ip = req.headers['cf-connecting-ip'] || req.connection.remoteAddress | ||||||
|  |  | ||||||
|     const tries = dbtools.Select(userDB, 'veteranPWRequests', { |     const tries = dbtools.Select(userDB, 'veteranPWRequests', { | ||||||
|       ip: ip |       ip: ip | ||||||
|     })[0] |     })[0] | ||||||
| @@ -160,7 +159,7 @@ function GetApp () { | |||||||
|       if (tries.count > maxVeteranPwGetCount) { |       if (tries.count > maxVeteranPwGetCount) { | ||||||
|         res.json({ |         res.json({ | ||||||
|           result: 'error', |           result: 'error', | ||||||
|           msg: 'Too many tries' |           msg: 'Too many tries from this IP' | ||||||
|         }) |         }) | ||||||
|         logger.Log(`Too many veteran PW requests from ${ip}!`, logger.GetColor('cyan')) |         logger.Log(`Too many veteran PW requests from ${ip}!`, logger.GetColor('cyan')) | ||||||
|         return |         return | ||||||
| @@ -180,10 +179,11 @@ function GetApp () { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     const oldUserID = req.body.cid |     const oldUserID = req.body.cid | ||||||
|  |  | ||||||
|     if (!oldUserID) { |     if (!oldUserID) { | ||||||
|       res.json({ |       res.json({ | ||||||
|         result: 'error', |         result: 'error', | ||||||
|         msg: 'No CID recieved' |         msg: 'No Client ID recieved' | ||||||
|       }) |       }) | ||||||
|       logger.Log(`No client ID recieved`, logger.GetColor('cyan')) |       logger.Log(`No client ID recieved`, logger.GetColor('cyan')) | ||||||
|       return |       return | ||||||
| @@ -210,14 +210,14 @@ function GetApp () { | |||||||
|         logger.Log(`Veteran user #${user.id} already requested password`, logger.GetColor('cyan')) |         logger.Log(`Veteran user #${user.id} already requested password`, logger.GetColor('cyan')) | ||||||
|         res.json({ |         res.json({ | ||||||
|           result: 'error', |           result: 'error', | ||||||
|           msg: 'Password already requested once' |           msg: 'Password already requested' | ||||||
|         }) |         }) | ||||||
|       } |       } | ||||||
|     } else { |     } else { | ||||||
|       logger.Log(`Invalid password request with CID: ${oldUserID}`, logger.GetColor('cyan')) |       logger.Log(`Invalid password request with CID: ${oldUserID}`, logger.GetColor('cyan')) | ||||||
|       res.json({ |       res.json({ | ||||||
|         result: 'error', |         result: 'error', | ||||||
|         msg: 'no such CID' |         msg: 'No such Client ID' | ||||||
|       }) |       }) | ||||||
|     } |     } | ||||||
|   }) |   }) | ||||||
| @@ -225,7 +225,6 @@ function GetApp () { | |||||||
|   app.post('/login', (req, res) => { |   app.post('/login', (req, res) => { | ||||||
|     logger.LogReq(req) |     logger.LogReq(req) | ||||||
|     const pw = req.body.pw |     const pw = req.body.pw | ||||||
|     const redirectTo = req.body.redirect |  | ||||||
|     const ip = req.headers['cf-connecting-ip'] || req.connection.remoteAddress |     const ip = req.headers['cf-connecting-ip'] || req.connection.remoteAddress | ||||||
|     const user = dbtools.Select(userDB, 'users', { |     const user = dbtools.Select(userDB, 'users', { | ||||||
|       pw: pw |       pw: pw | ||||||
| @@ -269,24 +268,17 @@ function GetApp () { | |||||||
|         sameSite: 'none' |         sameSite: 'none' | ||||||
|       }) |       }) | ||||||
|  |  | ||||||
|       if (redirectTo) { |       res.json({ | ||||||
|         res.redirect(redirectTo) |         result: 'success', | ||||||
|       } else { |         msg: 'you are now logged in' | ||||||
|         res.json({ |       }) | ||||||
|           result: 'success', |  | ||||||
|           msg: 'you are now logged in' |  | ||||||
|         }) |  | ||||||
|       } |  | ||||||
|       logger.Log(`Successfull login with user ID: #${user.id}`, logger.GetColor('cyan')) |       logger.Log(`Successfull login with user ID: #${user.id}`, logger.GetColor('cyan')) | ||||||
|     } else { |     } else { | ||||||
|       logger.Log(`Login attempt with invalid pw: ${pw}`, logger.GetColor('cyan')) |       logger.Log(`Login attempt with invalid pw: ${pw}`, logger.GetColor('cyan')) | ||||||
|       if (redirectTo) { |       res.json({ | ||||||
|         res.redirect(redirectTo) // TODO |         result: 'error', | ||||||
|       } else { |         msg: 'Invalid password' | ||||||
|         res.json({ |       }) | ||||||
|           msg: 'invalid pw' |  | ||||||
|         }) |  | ||||||
|       } |  | ||||||
|     } |     } | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -53,7 +53,8 @@ function GetApp () { | |||||||
|     userDB: userDB, |     userDB: userDB, | ||||||
|     jsonResponse: false, |     jsonResponse: false, | ||||||
|     exceptions: [ |     exceptions: [ | ||||||
|       '/favicon.ico' |       '/favicon.ico', | ||||||
|  |       '/getVeteranPw' | ||||||
|     ] |     ] | ||||||
|   })) |   })) | ||||||
|   app.use(express.static('modules/qmining/public')) |   app.use(express.static('modules/qmining/public')) | ||||||
| @@ -172,6 +173,13 @@ function GetApp () { | |||||||
|     logger.LogReq(req) |     logger.LogReq(req) | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|  |   app.get('/getVeteranPw', function (req, res) { | ||||||
|  |     res.render('veteranPw', { | ||||||
|  |       cid: req.query.cid | ||||||
|  |     }) | ||||||
|  |     logger.LogReq(req) | ||||||
|  |   }) | ||||||
|  |  | ||||||
|   app.get('*', function (req, res) { |   app.get('*', function (req, res) { | ||||||
|     res.status(404).render('404') |     res.status(404).render('404') | ||||||
|   }) |   }) | ||||||
|   | |||||||
							
								
								
									
										117
									
								
								modules/qmining/views/veteranPw.ejs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								modules/qmining/views/veteranPw.ejs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,117 @@ | |||||||
|  |  | ||||||
|  | <html> | ||||||
|  |   <body bgcolor="#212127"> | ||||||
|  |     <head> | ||||||
|  |       <title>Frylabs</title> | ||||||
|  |       <meta charset="UTF-8"> | ||||||
|  |       <meta name="viewport" content="width=device-width, initial-scale=0.6" /> | ||||||
|  |       <style> | ||||||
|  |         .center { | ||||||
|  |           width: 440px; | ||||||
|  |           height: 340px; | ||||||
|  |           position: absolute; | ||||||
|  |           left: 0; | ||||||
|  |           right: 0; | ||||||
|  |           top: 0; | ||||||
|  |           bottom: 0; | ||||||
|  |           margin: auto; | ||||||
|  |           max-width: 100%; | ||||||
|  |           max-height: 100%; | ||||||
|  |           overflow: auto; | ||||||
|  |  | ||||||
|  |           text-align: center; | ||||||
|  |         } | ||||||
|  |         .text { | ||||||
|  |           font-size: 18px; | ||||||
|  |           color: white; | ||||||
|  |           margin: 20px; | ||||||
|  |         } | ||||||
|  |         .title { | ||||||
|  |           font-size: 50px; | ||||||
|  |           font-weight: bold; | ||||||
|  |           color: white; | ||||||
|  |         } | ||||||
|  |         .inputContainer { | ||||||
|  |           width: 100%; | ||||||
|  |         } | ||||||
|  |         .showpwContainer { | ||||||
|  |           color: white; | ||||||
|  |           width: 40px; | ||||||
|  |           cursor: pointer; | ||||||
|  |         } | ||||||
|  |         input[type=text], input[type=password] { | ||||||
|  |           width: 100%; | ||||||
|  |           padding: 12px 20px; | ||||||
|  |           margin: 8px 0; | ||||||
|  |           box-sizing: border-box; | ||||||
|  |           border: 2px solid #fff; | ||||||
|  |           text-align: center; | ||||||
|  |         } | ||||||
|  |         input[type=text], input[type=password]:focus { | ||||||
|  |           border: 2px solid #000; | ||||||
|  |         } | ||||||
|  |         button { | ||||||
|  |           width: 100px; | ||||||
|  |           background-color: #9999ff; | ||||||
|  |           border: none; | ||||||
|  |           color: white; | ||||||
|  |           padding: 16px 32px; | ||||||
|  |           text-decoration: none; | ||||||
|  |           margin: 4px 2px; | ||||||
|  |           cursor: pointer; | ||||||
|  |         } | ||||||
|  |       </style> | ||||||
|  |     </head> | ||||||
|  |     <div class='center'> | ||||||
|  |       <div class='title'> | ||||||
|  |         Frylabs | ||||||
|  |       </div> | ||||||
|  |       <div id='text' class='text'> | ||||||
|  |         Másold be ide régi kliens ID-d, és az alapján jelszót ad. Ezt csak egyszer teheted meg, a | ||||||
|  |         kapott jelszót tuti helyre írd le! | ||||||
|  |       </div> | ||||||
|  |       <div id='form'> | ||||||
|  |         <div class='inputContainer'> | ||||||
|  |           <input type='text' id='cid' name='pw' autocomplete="off"/> | ||||||
|  |         </div> | ||||||
|  |         <input type='hidden' name='redirect' value='asd' autocomplete="off"/> | ||||||
|  |         <button id='sendButton' onclick="GetVeteranPW(this)">Submit</button> | ||||||
|  |       </div> | ||||||
|  |     </div> | ||||||
|  |   </body> | ||||||
|  |   <script> | ||||||
|  |     function HandleResp (resp) { | ||||||
|  |       const textNode = document.getElementById('text') | ||||||
|  |       document.getElementById('sendButton').innerText = 'Submit' | ||||||
|  |       if (resp.result === 'success') { | ||||||
|  |         document.getElementById('form').style.display = 'none' | ||||||
|  |         textNode.innerText = 'Password:' | ||||||
|  |         const pwDiv = document.createElement('div') | ||||||
|  |         pwDiv.innerText = resp.pw | ||||||
|  |         pwDiv.style.fontSize = '20px' | ||||||
|  |         textNode.appendChild(pwDiv) | ||||||
|  |       } else { | ||||||
|  |         textNode.innerText = resp.msg | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     async function GetVeteranPW(button) { | ||||||
|  |       button.innerText = '...' | ||||||
|  |       const rawResponse = await fetch('http://api.frylabs.net/getveteranpw', { | ||||||
|  |         method: 'POST', | ||||||
|  |         credentials: 'include', | ||||||
|  |         headers: { | ||||||
|  |           'Accept': 'application/json', | ||||||
|  |           'Content-Type': 'application/json' | ||||||
|  |         }, | ||||||
|  |         body: JSON.stringify({ | ||||||
|  |           cid: document.getElementById('cid').value | ||||||
|  |         }) | ||||||
|  |       }) | ||||||
|  |       rawResponse.json() | ||||||
|  |         .then((resp) => { | ||||||
|  |           HandleResp(resp) | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|  |   </script> | ||||||
|  | </html> | ||||||
| @@ -21,6 +21,11 @@ | |||||||
|  |  | ||||||
|           text-align: center; |           text-align: center; | ||||||
|         } |         } | ||||||
|  |         .text { | ||||||
|  |           font-size: 18px; | ||||||
|  |           color: white; | ||||||
|  |           margin: 20px; | ||||||
|  |         } | ||||||
|         .title { |         .title { | ||||||
|           font-size: 50px; |           font-size: 50px; | ||||||
|           font-weight: bold; |           font-weight: bold; | ||||||
| @@ -45,7 +50,7 @@ | |||||||
|         input[type=text], input[type=password]:focus { |         input[type=text], input[type=password]:focus { | ||||||
|           border: 2px solid #000; |           border: 2px solid #000; | ||||||
|         } |         } | ||||||
|          input[type=button], input[type=submit], input[type=reset] { |         button { | ||||||
|           background-color: #9999ff; |           background-color: #9999ff; | ||||||
|           border: none; |           border: none; | ||||||
|           color: white; |           color: white; | ||||||
| @@ -60,16 +65,17 @@ | |||||||
|       <div class='title'> |       <div class='title'> | ||||||
|         Frylabs |         Frylabs | ||||||
|       </div> |       </div> | ||||||
| 	<form action="http://api.frylabs.net/login" method="POST"> |       <div id='text' class='text'> | ||||||
|  |       </div> | ||||||
|  |       <div id='form'> | ||||||
|         <div class='inputContainer'> |         <div class='inputContainer'> | ||||||
|           <input type='password' id='pw' name='pw' autocomplete="off"/> |           <input type='password' id='pw' name='pw' autocomplete="off"/> | ||||||
|           <!-- <span onclick="ShowHidePW()" class='showpwContainer'> |           <!-- <span onclick="ShowHidePW()" class='showpwContainer'> | ||||||
|             👁 |             👁 | ||||||
|           </span> --> |           </span> --> | ||||||
|         </div> |         </div> | ||||||
|         <input type='hidden' name='redirect' value=<%= redirect %> autocomplete="off"/> |         <button id='sendButton' onclick="Login(this)">Submit</button> | ||||||
|         <input type='submit' value='Submit' formmethod='post' /> |       </div> | ||||||
|       </form> |  | ||||||
|     </div> |     </div> | ||||||
|   </body> |   </body> | ||||||
|   <script> |   <script> | ||||||
| @@ -81,5 +87,35 @@ | |||||||
|         x.type = "password"; |         x.type = "password"; | ||||||
|       } |       } | ||||||
|     }  |     }  | ||||||
|  |     function HandleResp (resp) { | ||||||
|  |       console.log(resp) | ||||||
|  |       document.getElementById('sendButton').innerText = 'Submit' | ||||||
|  |       const textNode = document.getElementById('text') | ||||||
|  |       if (resp.result === 'success') { | ||||||
|  |         location.reload() | ||||||
|  |         textNode.innerText = resp.msg | ||||||
|  |       } else { | ||||||
|  |         textNode.innerText = resp.msg | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     async function Login(button) { | ||||||
|  |       button.innerText = '...' | ||||||
|  |       const rawResponse = await fetch('http://api.frylabs.net/login', { | ||||||
|  |         method: 'POST', | ||||||
|  |         credentials: 'include', | ||||||
|  |         headers: { | ||||||
|  |           'Accept': 'application/json', | ||||||
|  |           'Content-Type': 'application/json' | ||||||
|  |         }, | ||||||
|  |         body: JSON.stringify({ | ||||||
|  |           pw: document.getElementById('pw').value | ||||||
|  |         }) | ||||||
|  |       }) | ||||||
|  |       rawResponse.json() | ||||||
|  |         .then((resp) => { | ||||||
|  |           HandleResp(resp) | ||||||
|  |         }) | ||||||
|  |     } | ||||||
|   </script> |   </script> | ||||||
| </html> | </html> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user