From 7c2663fa56ce54818c53be4cc42884eb6d27bbec Mon Sep 17 00:00:00 2001 From: "G.Ambatte" Date: Mon, 7 Mar 2022 13:26:54 +1300 Subject: [PATCH] Add passwordless login for local installs --- client/homebrew/homebrew.jsx | 1 + client/homebrew/navbar/account.navitem.jsx | 30 ++++++++++++++++++++++ server/app.js | 7 ++++- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 54dcf2206..84a69b3a7 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -36,6 +36,7 @@ const Homebrew = createClass({ global.account = this.props.account; global.version = this.props.version; global.enable_v3 = this.props.enable_v3; + global.config = this.props.config; }, render : function (){ return ( diff --git a/client/homebrew/navbar/account.navitem.jsx b/client/homebrew/navbar/account.navitem.jsx index 004685a13..e0fa555da 100644 --- a/client/homebrew/navbar/account.navitem.jsx +++ b/client/homebrew/navbar/account.navitem.jsx @@ -1,6 +1,7 @@ const React = require('react'); const createClass = require('create-react-class'); const Nav = require('naturalcrit/nav/nav.jsx'); +const jwt = require('jwt-simple'); const Account = createClass({ displayName : 'AccountNavItem', @@ -25,7 +26,26 @@ const Account = createClass({ }; }, + localLogin : function(){ + const username = prompt('Enter username:'); + if(!username) {return;}; + + const payload = { + username : username, + issued : new Date() + }; + const expiry = new Date; + expiry.setFullYear(expiry.getFullYear() + 1); + const token = jwt.encode(payload, global.config.secret); + + document.cookie = `nc_session=${token};expires=${expiry};path=/;samesite=lax;${window.domain ? `domain=${window.domain}` : ''}`; + window.location.reload(true); + }, + render : function(){ + const localEnvironments = ['local', 'docker']; + + // Logged in if(global.account){ return ; } + // Logged out + // LOCAL ONLY + if(localEnvironments.includes(global.config.environment)) { + return + login + ; + }; + + // Logged out + // Production site return login ; diff --git a/server/app.js b/server/app.js index de51c8882..fb1e4e64b 100644 --- a/server/app.js +++ b/server/app.js @@ -262,6 +262,10 @@ app.get('/print/:id', asyncHandler(async (req, res, next)=>{ //Render the page const templateFn = require('./../client/template.js'); app.use((req, res)=>{ + const configuration = { + environment : config.get('node_env'), + secret : config.get('secret') + }; const props = { version : require('./../package.json').version, url : req.originalUrl, @@ -269,7 +273,8 @@ app.use((req, res)=>{ brews : req.brews, googleBrews : req.googleBrews, account : req.account, - enable_v3 : config.get('enable_v3') + enable_v3 : config.get('enable_v3'), + config : configuration }; const title = req.brew ? req.brew.title : ''; templateFn('homebrew', title, props)