0
0
mirror of https://github.com/naturalcrit/homebrewery.git synced 2025-12-24 22:52:40 +00:00

Add passwordless login for local installs

This commit is contained in:
G.Ambatte
2022-03-07 13:26:54 +13:00
parent 04cd53397a
commit 7c2663fa56
3 changed files with 37 additions and 1 deletions

View File

@@ -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 (

View File

@@ -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 <Nav.dropdown>
<Nav.item
@@ -53,6 +73,16 @@ const Account = createClass({
</Nav.dropdown>;
}
// Logged out
// LOCAL ONLY
if(localEnvironments.includes(global.config.environment)) {
return <Nav.item color='teal' icon='fas fa-sign-in-alt' onClick={this.localLogin}>
login
</Nav.item>;
};
// Logged out
// Production site
return <Nav.item href={`https://www.naturalcrit.com/login?redirect=${this.state.url}`} color='teal' icon='fas fa-sign-in-alt'>
login
</Nav.item>;

View File

@@ -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)