Skip to content

Instantly share code, notes, and snippets.

View alancasagrande's full-sized avatar

Alan Casagrande alancasagrande

  • Berlin, Germany
View GitHub Profile
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const commonConfig = {
mode: 'development',
module: {
rules: [
{
test: /\.m?js$/,
{
"name": "mfa-demo-node",
"version": "1.0.0",
"private": true,
"scripts": {
"build:dev": "webpack --watch",
"server:dev": "nodemon build/server.js --watch build/server.js"
},
"devDependencies": {
"@babel/core": "^7.12.3",
import { isArray } from 'util';
const fs = require('fs');
const storagePath = './storage';
const usersPath = `${storagePath}/users.json`;
const initialUsers = {
alan: {
username: 'alan',
import express from 'express';
import cookieSession from 'cookie-session';
import bodyParser from 'body-parser';
import { initStorage, getUser } from './storage';
initStorage();
const app = express();
app.use(
import React, { useCallback, useState } from 'react';
import { login } from './api';
import Input from './Input';
export default function Login({ onLogin }) {
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
const [invalidCredentials, setInvalidCredentials] = useState(false);
const handleSubmit = useCallback(
import React from 'react';
export default function Input({ label, ...props }) {
return (
<div>
<label htmlFor={props.id}>{label}</label>
<br />
<input {...props} />
<br />
<br />
export async function login(username, password) {
const res = await fetch('/login', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password }),
});
if (res.status === 401) return {};
const user = await res.json();
import React, { useState } from 'react';
import Login from './Login';
export default function App({ user }) {
// user not logged in, show login form
if (!user) return <Login />;
return (
<div>
Hello, {user.username}. <a href="/logout">Logout</a>
import moment from 'moment';
function HelloComponent() {
const element = document.createElement('div');
element.innerText = `Now ${moment().format('L LT')}`;
return element;
}
document.body.appendChild(HelloComponent());
<script src="vendors.js"></script>