Enforce validation uppon registration.

Fix issue #3
This commit is contained in:
Sagi Dayan 2020-02-15 12:34:42 -05:00
parent 96cf47c419
commit b75ac5aa97
12 changed files with 912 additions and 81 deletions

View file

@ -1,34 +1,36 @@
'use strict' 'use strict'
const User = use('App/Models/User') const User = use('App/Models/User')
class AuthController { class AuthController {
async registerIndex({view}) {
async registerIndex({view}){
return view.render('register') return view.render('register')
} }
async loginIndex({view}){ async loginIndex({view}) {
return view.render('login') return view.render('login')
} }
async register({request, response, view, session, auth}){ async register({request, response, view, session, auth}) {
const user = await User.create({ const user = await User.create({
email: request.input('email'), email: request.input('email'),
name: request.input('name'), name: request.input('name'),
password: request.input('password') password: request.input('password')
}); });
if (user.id == 1) {
user.is_admin = true;
}
await user.save();
await auth.login(user) await auth.login(user)
response.redirect('/'); response.redirect('/');
} }
async login({request,response, auth, session}){ async login({request, response, auth, session}) {
console.log('login'); console.log('login');
const { email, password } = request.all() const {email, password} = request.all()
try{ try {
const token = await auth.attempt(email, password); const token = await auth.attempt(email, password);
console.log('logged in'); console.log('logged in');
}catch(e){ } catch (e) {
session.withErrors({ loginError: 'Invalid Credentials' }).flashAll() session.withErrors({loginError: 'Invalid Credentials'}).flashAll()
return response.redirect('back') return response.redirect('back')
} }
@ -36,7 +38,7 @@ class AuthController {
response.redirect('/'); response.redirect('/');
} }
async logout({auth, response}){ async logout({auth, response}) {
await auth.logout(); await auth.logout();
response.redirect('/'); response.redirect('/');
} }

View file

@ -5,11 +5,11 @@
"description": "A shared story time experience", "description": "A shared story time experience",
"main": "server.js", "main": "server.js",
"scripts": { "scripts": {
"build:css": "node_modules/.bin/node-sass --omit-source-map-url resources/sass/main.scss public/style.css", "build:css": "npx node-sass --omit-source-map-url resources/sass/main.scss public/style.css",
"build:applications": "node_modules/.bin/webpack --mode production", "build:applications": "npx webpack --mode production",
"watch:css": "npm run build:css -- --watch", "watch:css": "npm run build:css -- --watch",
"watch:applications": "node_modules/.bin/webpack --watch", "watch:applications": "npx webpack --watch",
"migrate": "node_modules/.bin/adonis migration:run -f", "migrate": "npx adonis migration:run -f",
"build": "npm run migrate && npm run build:css && npm run build:applications", "build": "npm run migrate && npm run build:css && npm run build:applications",
"start": "npm run migrate && node server.js", "start": "npm run migrate && node server.js",
"test": "node ace test" "test": "node ace test"

View file

@ -63,7 +63,7 @@
/******/ /******/
/******/ var hotApplyOnUpdate = true; /******/ var hotApplyOnUpdate = true;
/******/ // eslint-disable-next-line no-unused-vars /******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentHash = "a84d927f26b0414dc0a0"; /******/ var hotCurrentHash = "00aef5287e621526e449";
/******/ var hotRequestTimeout = 10000; /******/ var hotRequestTimeout = 10000;
/******/ var hotCurrentModuleData = {}; /******/ var hotCurrentModuleData = {};
/******/ var hotCurrentChildModule; /******/ var hotCurrentChildModule;

View file

@ -1,11 +0,0 @@
"use strict";
document.addEventListener("DOMContentLoaded", function () {
(function Navbar() {
var menuButton = document.getElementById('menu-button');
var navMenu = document.getElementById('nav-menu');
menuButton.onclick = function (event) {
navMenu.classList.toggle('is-active');
};
})();
});
//# sourceMappingURL=navbar.js.map

View file

@ -1 +0,0 @@
{"version":3,"file":"navbar.js","sourceRoot":"","sources":["../../../resources/scripts/components/navbar.ts"],"names":[],"mappings":";AACA,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE;IAC5C,CAAC,SAAS,MAAM;QACd,IAAM,UAAU,GAAsB,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAsB,CAAC;QAClG,IAAM,OAAO,GAAmB,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAmB,CAAC;QAEtF,UAAU,CAAC,OAAO,GAAG,UAAC,KAAK;YACzB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACxC,CAAC,CAAA;IAGH,CAAC,CAAC,EAAE,CAAC;AAEP,CAAC,CAAC,CAAC"}

View file

@ -63,7 +63,7 @@
/******/ /******/
/******/ var hotApplyOnUpdate = true; /******/ var hotApplyOnUpdate = true;
/******/ // eslint-disable-next-line no-unused-vars /******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentHash = "a84d927f26b0414dc0a0"; /******/ var hotCurrentHash = "00aef5287e621526e449";
/******/ var hotRequestTimeout = 10000; /******/ var hotRequestTimeout = 10000;
/******/ var hotCurrentModuleData = {}; /******/ var hotCurrentModuleData = {};
/******/ var hotCurrentChildModule; /******/ var hotCurrentChildModule;
@ -258,7 +258,7 @@
/******/ }; /******/ };
/******/ }); /******/ });
/******/ hotUpdate = {}; /******/ hotUpdate = {};
/******/ var chunkId = "components"; /******/ var chunkId = "components/navbar";
/******/ // eslint-disable-next-line no-lone-blocks /******/ // eslint-disable-next-line no-lone-blocks
/******/ { /******/ {
/******/ /*globals chunkId */ /******/ /*globals chunkId */

View file

@ -0,0 +1,810 @@
/******/ (function(modules) { // webpackBootstrap
/******/ function hotDisposeChunk(chunkId) {
/******/ delete installedChunks[chunkId];
/******/ }
/******/ var parentHotUpdateCallback = window["webpackHotUpdate"];
/******/ window["webpackHotUpdate"] = // eslint-disable-next-line no-unused-vars
/******/ function webpackHotUpdateCallback(chunkId, moreModules) {
/******/ hotAddUpdateChunk(chunkId, moreModules);
/******/ if (parentHotUpdateCallback) parentHotUpdateCallback(chunkId, moreModules);
/******/ } ;
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotDownloadUpdateChunk(chunkId) {
/******/ var script = document.createElement("script");
/******/ script.charset = "utf-8";
/******/ script.src = __webpack_require__.p + "" + chunkId + "." + hotCurrentHash + ".hot-update.js";
/******/ if (null) script.crossOrigin = null;
/******/ document.head.appendChild(script);
/******/ }
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotDownloadManifest(requestTimeout) {
/******/ requestTimeout = requestTimeout || 10000;
/******/ return new Promise(function(resolve, reject) {
/******/ if (typeof XMLHttpRequest === "undefined") {
/******/ return reject(new Error("No browser support"));
/******/ }
/******/ try {
/******/ var request = new XMLHttpRequest();
/******/ var requestPath = __webpack_require__.p + "" + hotCurrentHash + ".hot-update.json";
/******/ request.open("GET", requestPath, true);
/******/ request.timeout = requestTimeout;
/******/ request.send(null);
/******/ } catch (err) {
/******/ return reject(err);
/******/ }
/******/ request.onreadystatechange = function() {
/******/ if (request.readyState !== 4) return;
/******/ if (request.status === 0) {
/******/ // timeout
/******/ reject(
/******/ new Error("Manifest request to " + requestPath + " timed out.")
/******/ );
/******/ } else if (request.status === 404) {
/******/ // no update available
/******/ resolve();
/******/ } else if (request.status !== 200 && request.status !== 304) {
/******/ // other failure
/******/ reject(new Error("Manifest request to " + requestPath + " failed."));
/******/ } else {
/******/ // success
/******/ try {
/******/ var update = JSON.parse(request.responseText);
/******/ } catch (e) {
/******/ reject(e);
/******/ return;
/******/ }
/******/ resolve(update);
/******/ }
/******/ };
/******/ });
/******/ }
/******/
/******/ var hotApplyOnUpdate = true;
/******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentHash = "00aef5287e621526e449";
/******/ var hotRequestTimeout = 10000;
/******/ var hotCurrentModuleData = {};
/******/ var hotCurrentChildModule;
/******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentParents = [];
/******/ // eslint-disable-next-line no-unused-vars
/******/ var hotCurrentParentsTemp = [];
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotCreateRequire(moduleId) {
/******/ var me = installedModules[moduleId];
/******/ if (!me) return __webpack_require__;
/******/ var fn = function(request) {
/******/ if (me.hot.active) {
/******/ if (installedModules[request]) {
/******/ if (installedModules[request].parents.indexOf(moduleId) === -1) {
/******/ installedModules[request].parents.push(moduleId);
/******/ }
/******/ } else {
/******/ hotCurrentParents = [moduleId];
/******/ hotCurrentChildModule = request;
/******/ }
/******/ if (me.children.indexOf(request) === -1) {
/******/ me.children.push(request);
/******/ }
/******/ } else {
/******/ console.warn(
/******/ "[HMR] unexpected require(" +
/******/ request +
/******/ ") from disposed module " +
/******/ moduleId
/******/ );
/******/ hotCurrentParents = [];
/******/ }
/******/ return __webpack_require__(request);
/******/ };
/******/ var ObjectFactory = function ObjectFactory(name) {
/******/ return {
/******/ configurable: true,
/******/ enumerable: true,
/******/ get: function() {
/******/ return __webpack_require__[name];
/******/ },
/******/ set: function(value) {
/******/ __webpack_require__[name] = value;
/******/ }
/******/ };
/******/ };
/******/ for (var name in __webpack_require__) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(__webpack_require__, name) &&
/******/ name !== "e" &&
/******/ name !== "t"
/******/ ) {
/******/ Object.defineProperty(fn, name, ObjectFactory(name));
/******/ }
/******/ }
/******/ fn.e = function(chunkId) {
/******/ if (hotStatus === "ready") hotSetStatus("prepare");
/******/ hotChunksLoading++;
/******/ return __webpack_require__.e(chunkId).then(finishChunkLoading, function(err) {
/******/ finishChunkLoading();
/******/ throw err;
/******/ });
/******/
/******/ function finishChunkLoading() {
/******/ hotChunksLoading--;
/******/ if (hotStatus === "prepare") {
/******/ if (!hotWaitingFilesMap[chunkId]) {
/******/ hotEnsureUpdateChunk(chunkId);
/******/ }
/******/ if (hotChunksLoading === 0 && hotWaitingFiles === 0) {
/******/ hotUpdateDownloaded();
/******/ }
/******/ }
/******/ }
/******/ };
/******/ fn.t = function(value, mode) {
/******/ if (mode & 1) value = fn(value);
/******/ return __webpack_require__.t(value, mode & ~1);
/******/ };
/******/ return fn;
/******/ }
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotCreateModule(moduleId) {
/******/ var hot = {
/******/ // private stuff
/******/ _acceptedDependencies: {},
/******/ _declinedDependencies: {},
/******/ _selfAccepted: false,
/******/ _selfDeclined: false,
/******/ _disposeHandlers: [],
/******/ _main: hotCurrentChildModule !== moduleId,
/******/
/******/ // Module API
/******/ active: true,
/******/ accept: function(dep, callback) {
/******/ if (dep === undefined) hot._selfAccepted = true;
/******/ else if (typeof dep === "function") hot._selfAccepted = dep;
/******/ else if (typeof dep === "object")
/******/ for (var i = 0; i < dep.length; i++)
/******/ hot._acceptedDependencies[dep[i]] = callback || function() {};
/******/ else hot._acceptedDependencies[dep] = callback || function() {};
/******/ },
/******/ decline: function(dep) {
/******/ if (dep === undefined) hot._selfDeclined = true;
/******/ else if (typeof dep === "object")
/******/ for (var i = 0; i < dep.length; i++)
/******/ hot._declinedDependencies[dep[i]] = true;
/******/ else hot._declinedDependencies[dep] = true;
/******/ },
/******/ dispose: function(callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ addDisposeHandler: function(callback) {
/******/ hot._disposeHandlers.push(callback);
/******/ },
/******/ removeDisposeHandler: function(callback) {
/******/ var idx = hot._disposeHandlers.indexOf(callback);
/******/ if (idx >= 0) hot._disposeHandlers.splice(idx, 1);
/******/ },
/******/
/******/ // Management API
/******/ check: hotCheck,
/******/ apply: hotApply,
/******/ status: function(l) {
/******/ if (!l) return hotStatus;
/******/ hotStatusHandlers.push(l);
/******/ },
/******/ addStatusHandler: function(l) {
/******/ hotStatusHandlers.push(l);
/******/ },
/******/ removeStatusHandler: function(l) {
/******/ var idx = hotStatusHandlers.indexOf(l);
/******/ if (idx >= 0) hotStatusHandlers.splice(idx, 1);
/******/ },
/******/
/******/ //inherit from previous dispose call
/******/ data: hotCurrentModuleData[moduleId]
/******/ };
/******/ hotCurrentChildModule = undefined;
/******/ return hot;
/******/ }
/******/
/******/ var hotStatusHandlers = [];
/******/ var hotStatus = "idle";
/******/
/******/ function hotSetStatus(newStatus) {
/******/ hotStatus = newStatus;
/******/ for (var i = 0; i < hotStatusHandlers.length; i++)
/******/ hotStatusHandlers[i].call(null, newStatus);
/******/ }
/******/
/******/ // while downloading
/******/ var hotWaitingFiles = 0;
/******/ var hotChunksLoading = 0;
/******/ var hotWaitingFilesMap = {};
/******/ var hotRequestedFilesMap = {};
/******/ var hotAvailableFilesMap = {};
/******/ var hotDeferred;
/******/
/******/ // The update info
/******/ var hotUpdate, hotUpdateNewHash;
/******/
/******/ function toModuleId(id) {
/******/ var isNumber = +id + "" === id;
/******/ return isNumber ? +id : id;
/******/ }
/******/
/******/ function hotCheck(apply) {
/******/ if (hotStatus !== "idle") {
/******/ throw new Error("check() is only allowed in idle status");
/******/ }
/******/ hotApplyOnUpdate = apply;
/******/ hotSetStatus("check");
/******/ return hotDownloadManifest(hotRequestTimeout).then(function(update) {
/******/ if (!update) {
/******/ hotSetStatus("idle");
/******/ return null;
/******/ }
/******/ hotRequestedFilesMap = {};
/******/ hotWaitingFilesMap = {};
/******/ hotAvailableFilesMap = update.c;
/******/ hotUpdateNewHash = update.h;
/******/
/******/ hotSetStatus("prepare");
/******/ var promise = new Promise(function(resolve, reject) {
/******/ hotDeferred = {
/******/ resolve: resolve,
/******/ reject: reject
/******/ };
/******/ });
/******/ hotUpdate = {};
/******/ var chunkId = "views/register";
/******/ // eslint-disable-next-line no-lone-blocks
/******/ {
/******/ /*globals chunkId */
/******/ hotEnsureUpdateChunk(chunkId);
/******/ }
/******/ if (
/******/ hotStatus === "prepare" &&
/******/ hotChunksLoading === 0 &&
/******/ hotWaitingFiles === 0
/******/ ) {
/******/ hotUpdateDownloaded();
/******/ }
/******/ return promise;
/******/ });
/******/ }
/******/
/******/ // eslint-disable-next-line no-unused-vars
/******/ function hotAddUpdateChunk(chunkId, moreModules) {
/******/ if (!hotAvailableFilesMap[chunkId] || !hotRequestedFilesMap[chunkId])
/******/ return;
/******/ hotRequestedFilesMap[chunkId] = false;
/******/ for (var moduleId in moreModules) {
/******/ if (Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {
/******/ hotUpdate[moduleId] = moreModules[moduleId];
/******/ }
/******/ }
/******/ if (--hotWaitingFiles === 0 && hotChunksLoading === 0) {
/******/ hotUpdateDownloaded();
/******/ }
/******/ }
/******/
/******/ function hotEnsureUpdateChunk(chunkId) {
/******/ if (!hotAvailableFilesMap[chunkId]) {
/******/ hotWaitingFilesMap[chunkId] = true;
/******/ } else {
/******/ hotRequestedFilesMap[chunkId] = true;
/******/ hotWaitingFiles++;
/******/ hotDownloadUpdateChunk(chunkId);
/******/ }
/******/ }
/******/
/******/ function hotUpdateDownloaded() {
/******/ hotSetStatus("ready");
/******/ var deferred = hotDeferred;
/******/ hotDeferred = null;
/******/ if (!deferred) return;
/******/ if (hotApplyOnUpdate) {
/******/ // Wrap deferred object in Promise to mark it as a well-handled Promise to
/******/ // avoid triggering uncaught exception warning in Chrome.
/******/ // See https://bugs.chromium.org/p/chromium/issues/detail?id=465666
/******/ Promise.resolve()
/******/ .then(function() {
/******/ return hotApply(hotApplyOnUpdate);
/******/ })
/******/ .then(
/******/ function(result) {
/******/ deferred.resolve(result);
/******/ },
/******/ function(err) {
/******/ deferred.reject(err);
/******/ }
/******/ );
/******/ } else {
/******/ var outdatedModules = [];
/******/ for (var id in hotUpdate) {
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ outdatedModules.push(toModuleId(id));
/******/ }
/******/ }
/******/ deferred.resolve(outdatedModules);
/******/ }
/******/ }
/******/
/******/ function hotApply(options) {
/******/ if (hotStatus !== "ready")
/******/ throw new Error("apply() is only allowed in ready status");
/******/ options = options || {};
/******/
/******/ var cb;
/******/ var i;
/******/ var j;
/******/ var module;
/******/ var moduleId;
/******/
/******/ function getAffectedStuff(updateModuleId) {
/******/ var outdatedModules = [updateModuleId];
/******/ var outdatedDependencies = {};
/******/
/******/ var queue = outdatedModules.map(function(id) {
/******/ return {
/******/ chain: [id],
/******/ id: id
/******/ };
/******/ });
/******/ while (queue.length > 0) {
/******/ var queueItem = queue.pop();
/******/ var moduleId = queueItem.id;
/******/ var chain = queueItem.chain;
/******/ module = installedModules[moduleId];
/******/ if (!module || module.hot._selfAccepted) continue;
/******/ if (module.hot._selfDeclined) {
/******/ return {
/******/ type: "self-declined",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ if (module.hot._main) {
/******/ return {
/******/ type: "unaccepted",
/******/ chain: chain,
/******/ moduleId: moduleId
/******/ };
/******/ }
/******/ for (var i = 0; i < module.parents.length; i++) {
/******/ var parentId = module.parents[i];
/******/ var parent = installedModules[parentId];
/******/ if (!parent) continue;
/******/ if (parent.hot._declinedDependencies[moduleId]) {
/******/ return {
/******/ type: "declined",
/******/ chain: chain.concat([parentId]),
/******/ moduleId: moduleId,
/******/ parentId: parentId
/******/ };
/******/ }
/******/ if (outdatedModules.indexOf(parentId) !== -1) continue;
/******/ if (parent.hot._acceptedDependencies[moduleId]) {
/******/ if (!outdatedDependencies[parentId])
/******/ outdatedDependencies[parentId] = [];
/******/ addAllToSet(outdatedDependencies[parentId], [moduleId]);
/******/ continue;
/******/ }
/******/ delete outdatedDependencies[parentId];
/******/ outdatedModules.push(parentId);
/******/ queue.push({
/******/ chain: chain.concat([parentId]),
/******/ id: parentId
/******/ });
/******/ }
/******/ }
/******/
/******/ return {
/******/ type: "accepted",
/******/ moduleId: updateModuleId,
/******/ outdatedModules: outdatedModules,
/******/ outdatedDependencies: outdatedDependencies
/******/ };
/******/ }
/******/
/******/ function addAllToSet(a, b) {
/******/ for (var i = 0; i < b.length; i++) {
/******/ var item = b[i];
/******/ if (a.indexOf(item) === -1) a.push(item);
/******/ }
/******/ }
/******/
/******/ // at begin all updates modules are outdated
/******/ // the "outdated" status can propagate to parents if they don't accept the children
/******/ var outdatedDependencies = {};
/******/ var outdatedModules = [];
/******/ var appliedUpdate = {};
/******/
/******/ var warnUnexpectedRequire = function warnUnexpectedRequire() {
/******/ console.warn(
/******/ "[HMR] unexpected require(" + result.moduleId + ") to disposed module"
/******/ );
/******/ };
/******/
/******/ for (var id in hotUpdate) {
/******/ if (Object.prototype.hasOwnProperty.call(hotUpdate, id)) {
/******/ moduleId = toModuleId(id);
/******/ /** @type {TODO} */
/******/ var result;
/******/ if (hotUpdate[id]) {
/******/ result = getAffectedStuff(moduleId);
/******/ } else {
/******/ result = {
/******/ type: "disposed",
/******/ moduleId: id
/******/ };
/******/ }
/******/ /** @type {Error|false} */
/******/ var abortError = false;
/******/ var doApply = false;
/******/ var doDispose = false;
/******/ var chainInfo = "";
/******/ if (result.chain) {
/******/ chainInfo = "\nUpdate propagation: " + result.chain.join(" -> ");
/******/ }
/******/ switch (result.type) {
/******/ case "self-declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of self decline: " +
/******/ result.moduleId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "declined":
/******/ if (options.onDeclined) options.onDeclined(result);
/******/ if (!options.ignoreDeclined)
/******/ abortError = new Error(
/******/ "Aborted because of declined dependency: " +
/******/ result.moduleId +
/******/ " in " +
/******/ result.parentId +
/******/ chainInfo
/******/ );
/******/ break;
/******/ case "unaccepted":
/******/ if (options.onUnaccepted) options.onUnaccepted(result);
/******/ if (!options.ignoreUnaccepted)
/******/ abortError = new Error(
/******/ "Aborted because " + moduleId + " is not accepted" + chainInfo
/******/ );
/******/ break;
/******/ case "accepted":
/******/ if (options.onAccepted) options.onAccepted(result);
/******/ doApply = true;
/******/ break;
/******/ case "disposed":
/******/ if (options.onDisposed) options.onDisposed(result);
/******/ doDispose = true;
/******/ break;
/******/ default:
/******/ throw new Error("Unexception type " + result.type);
/******/ }
/******/ if (abortError) {
/******/ hotSetStatus("abort");
/******/ return Promise.reject(abortError);
/******/ }
/******/ if (doApply) {
/******/ appliedUpdate[moduleId] = hotUpdate[moduleId];
/******/ addAllToSet(outdatedModules, result.outdatedModules);
/******/ for (moduleId in result.outdatedDependencies) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(
/******/ result.outdatedDependencies,
/******/ moduleId
/******/ )
/******/ ) {
/******/ if (!outdatedDependencies[moduleId])
/******/ outdatedDependencies[moduleId] = [];
/******/ addAllToSet(
/******/ outdatedDependencies[moduleId],
/******/ result.outdatedDependencies[moduleId]
/******/ );
/******/ }
/******/ }
/******/ }
/******/ if (doDispose) {
/******/ addAllToSet(outdatedModules, [result.moduleId]);
/******/ appliedUpdate[moduleId] = warnUnexpectedRequire;
/******/ }
/******/ }
/******/ }
/******/
/******/ // Store self accepted outdated modules to require them later by the module system
/******/ var outdatedSelfAcceptedModules = [];
/******/ for (i = 0; i < outdatedModules.length; i++) {
/******/ moduleId = outdatedModules[i];
/******/ if (
/******/ installedModules[moduleId] &&
/******/ installedModules[moduleId].hot._selfAccepted &&
/******/ // removed self-accepted modules should not be required
/******/ appliedUpdate[moduleId] !== warnUnexpectedRequire
/******/ ) {
/******/ outdatedSelfAcceptedModules.push({
/******/ module: moduleId,
/******/ errorHandler: installedModules[moduleId].hot._selfAccepted
/******/ });
/******/ }
/******/ }
/******/
/******/ // Now in "dispose" phase
/******/ hotSetStatus("dispose");
/******/ Object.keys(hotAvailableFilesMap).forEach(function(chunkId) {
/******/ if (hotAvailableFilesMap[chunkId] === false) {
/******/ hotDisposeChunk(chunkId);
/******/ }
/******/ });
/******/
/******/ var idx;
/******/ var queue = outdatedModules.slice();
/******/ while (queue.length > 0) {
/******/ moduleId = queue.pop();
/******/ module = installedModules[moduleId];
/******/ if (!module) continue;
/******/
/******/ var data = {};
/******/
/******/ // Call dispose handlers
/******/ var disposeHandlers = module.hot._disposeHandlers;
/******/ for (j = 0; j < disposeHandlers.length; j++) {
/******/ cb = disposeHandlers[j];
/******/ cb(data);
/******/ }
/******/ hotCurrentModuleData[moduleId] = data;
/******/
/******/ // disable module (this disables requires from this module)
/******/ module.hot.active = false;
/******/
/******/ // remove module from cache
/******/ delete installedModules[moduleId];
/******/
/******/ // when disposing there is no need to call dispose handler
/******/ delete outdatedDependencies[moduleId];
/******/
/******/ // remove "parents" references from all children
/******/ for (j = 0; j < module.children.length; j++) {
/******/ var child = installedModules[module.children[j]];
/******/ if (!child) continue;
/******/ idx = child.parents.indexOf(moduleId);
/******/ if (idx >= 0) {
/******/ child.parents.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/
/******/ // remove outdated dependency from module children
/******/ var dependency;
/******/ var moduleOutdatedDependencies;
/******/ for (moduleId in outdatedDependencies) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ ) {
/******/ module = installedModules[moduleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ for (j = 0; j < moduleOutdatedDependencies.length; j++) {
/******/ dependency = moduleOutdatedDependencies[j];
/******/ idx = module.children.indexOf(dependency);
/******/ if (idx >= 0) module.children.splice(idx, 1);
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // Now in "apply" phase
/******/ hotSetStatus("apply");
/******/
/******/ hotCurrentHash = hotUpdateNewHash;
/******/
/******/ // insert new code
/******/ for (moduleId in appliedUpdate) {
/******/ if (Object.prototype.hasOwnProperty.call(appliedUpdate, moduleId)) {
/******/ modules[moduleId] = appliedUpdate[moduleId];
/******/ }
/******/ }
/******/
/******/ // call accept handlers
/******/ var error = null;
/******/ for (moduleId in outdatedDependencies) {
/******/ if (
/******/ Object.prototype.hasOwnProperty.call(outdatedDependencies, moduleId)
/******/ ) {
/******/ module = installedModules[moduleId];
/******/ if (module) {
/******/ moduleOutdatedDependencies = outdatedDependencies[moduleId];
/******/ var callbacks = [];
/******/ for (i = 0; i < moduleOutdatedDependencies.length; i++) {
/******/ dependency = moduleOutdatedDependencies[i];
/******/ cb = module.hot._acceptedDependencies[dependency];
/******/ if (cb) {
/******/ if (callbacks.indexOf(cb) !== -1) continue;
/******/ callbacks.push(cb);
/******/ }
/******/ }
/******/ for (i = 0; i < callbacks.length; i++) {
/******/ cb = callbacks[i];
/******/ try {
/******/ cb(moduleOutdatedDependencies);
/******/ } catch (err) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "accept-errored",
/******/ moduleId: moduleId,
/******/ dependencyId: moduleOutdatedDependencies[i],
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ if (!error) error = err;
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // Load self accepted modules
/******/ for (i = 0; i < outdatedSelfAcceptedModules.length; i++) {
/******/ var item = outdatedSelfAcceptedModules[i];
/******/ moduleId = item.module;
/******/ hotCurrentParents = [moduleId];
/******/ try {
/******/ __webpack_require__(moduleId);
/******/ } catch (err) {
/******/ if (typeof item.errorHandler === "function") {
/******/ try {
/******/ item.errorHandler(err);
/******/ } catch (err2) {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-error-handler-errored",
/******/ moduleId: moduleId,
/******/ error: err2,
/******/ originalError: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ if (!error) error = err2;
/******/ }
/******/ if (!error) error = err;
/******/ }
/******/ } else {
/******/ if (options.onErrored) {
/******/ options.onErrored({
/******/ type: "self-accept-errored",
/******/ moduleId: moduleId,
/******/ error: err
/******/ });
/******/ }
/******/ if (!options.ignoreErrored) {
/******/ if (!error) error = err;
/******/ }
/******/ }
/******/ }
/******/ }
/******/
/******/ // handle errors in accept handlers and self accepted module load
/******/ if (error) {
/******/ hotSetStatus("fail");
/******/ return Promise.reject(error);
/******/ }
/******/
/******/ hotSetStatus("idle");
/******/ return new Promise(function(resolve) {
/******/ resolve(outdatedModules);
/******/ });
/******/ }
/******/
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {},
/******/ hot: hotCreateModule(moduleId),
/******/ parents: (hotCurrentParentsTemp = hotCurrentParents, hotCurrentParents = [], hotCurrentParentsTemp),
/******/ children: []
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, hotCreateRequire(moduleId));
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/ // __webpack_hash__
/******/ __webpack_require__.h = function() { return hotCurrentHash; };
/******/
/******/
/******/ // Load entry module and return exports
/******/ return hotCreateRequire("./resources/scripts/views/register.ts")(__webpack_require__.s = "./resources/scripts/views/register.ts");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./resources/scripts/views/register.ts":
/*!*********************************************!*\
!*** ./resources/scripts/views/register.ts ***!
\*********************************************/
/*! no static exports found */
/***/ (function(module, exports) {
eval("document.addEventListener(\"DOMContentLoaded\", function () {\n var isFormValid = false;\n var isPassMatch = false;\n var form = document.getElementById('form-register');\n var pass = document.getElementById('txt-register-password');\n var confirmPass = document.getElementById('txt-register-confirm-password');\n var terms = document.getElementById('chk-register-terms');\n var submit = document.getElementById('btn-register-submit');\n if (!pass || !confirmPass || !terms) alert('Something Went wrong');\n\n form.oninput = function (ev) {\n isPassMatch = pass.value === confirmPass.value && !!pass.value.trim().length;\n validateForm();\n };\n\n function validateForm() {\n isFormValid = form.checkValidity() && isPassMatch && terms.checked;\n submit.disabled = !isFormValid;\n }\n\n validateForm();\n});\n\n//# sourceURL=webpack:///./resources/scripts/views/register.ts?");
/***/ })
/******/ });

View file

@ -0,0 +1,24 @@
document.addEventListener("DOMContentLoaded", () => {
let isFormValid = false;
let isPassMatch = false;
const form = document.getElementById('form-register') as HTMLFormElement;
const pass = document.getElementById('txt-register-password') as HTMLInputElement;
const confirmPass = document.getElementById('txt-register-confirm-password') as HTMLInputElement;
const terms = document.getElementById('chk-register-terms') as HTMLInputElement;
const submit = document.getElementById('btn-register-submit') as HTMLButtonElement;
if (!pass || !confirmPass || !terms) alert('Something Went wrong');
form.oninput = (ev: Event) => {
isPassMatch = (pass.value === confirmPass.value) && !!pass.value.trim().length;
validateForm();
}
function validateForm(): void {
isFormValid = form.checkValidity() && isPassMatch && terms.checked;
submit.disabled = !isFormValid;
}
validateForm();
});

View file

@ -1,4 +1,4 @@
{{ script('scripts/components/navbar.js') }} {{ script('scripts/components/navbar/app.bundle.js') }}
<nav class="{{ isLanding ? 'darken' : '' }} navbar" role="navigation" aria-label="main navigation"> <nav class="{{ isLanding ? 'darken' : '' }} navbar" role="navigation" aria-label="main navigation">
<div class="navbar-brand"> <div class="navbar-brand">
<a class="navbar-item" href="/"> <a class="navbar-item" href="/">
@ -33,9 +33,14 @@
</a> </a>
<div class="navbar-dropdown"> <div class="navbar-dropdown">
<a class="navbar-item"> <a class="navbar-item" href='/settings'>
Settings Settings
</a> </a>
@if(auth.user.is_admin)
<a class="navbar-item" href='/admin'>
Admin Settigns
</a>
@endif
<a class="navbar-item" href="/logout"> <a class="navbar-item" href="/logout">
Logout Logout
</a> </a>

View file

@ -10,6 +10,7 @@
@!section('page-title') @!section('page-title')
</title> </title>
{{ style('style') }} {{ style('style') }}
{{ script('scripts/views/register/app.bundle.js') }}
@!section('scripts') @!section('scripts')
</head> </head>
<body> <body>
@ -27,13 +28,13 @@
<section class="section has-text-centered"> <section class="section has-text-centered">
<h1 class="title">Join Now</h1> <h1 class="title">Join Now</h1>
<h2 class="subtitle">It takes less then a minute. You could have been done by now, but you are still reading...</h2> <h2 class="subtitle">It takes less then a minute. You could have been done by now, but you are still reading...</h2>
<form class="form register" method="POST" action="{{ route('register') }}"> <form class="form register" method="POST" action="{{ route('register') }}" id="form-register">
{{ csrfField() }} {{ csrfField() }}
<nav class="level"> <nav class="level">
<div class="field"> <div class="field">
<label class="label has-text-light">Name</label> <label class="label has-text-light">Name</label>
<div class="control has-icons-left"> <div class="control has-icons-left">
<input class="input {{ getErrorFor('name') ? 'is-danger' : ''}}" name="name" type="text" placeholder="John Snow" value="{{ old('name', '') }}"> <input class="input {{ getErrorFor('name') ? 'is-danger' : ''}}" required="true" name="name" type="text" placeholder="John Snow" value="{{ old('name', '') }}">
<span class="icon is-small is-left"> <span class="icon is-small is-left">
<i class="fa fa-id-card"></i> <i class="fa fa-id-card"></i>
</span> </span>
@ -45,7 +46,7 @@
<div class="field"> <div class="field">
<label class="label has-text-light">Email</label> <label class="label has-text-light">Email</label>
<div class="control has-icons-left"> <div class="control has-icons-left">
<input class="input {{ getErrorFor('email') ? 'is-danger' : ''}}" name="email" type="email" placeholder="j.snow@thewall.com" value="{{ old('email', '') }}"> <input class="input {{ getErrorFor('email') ? 'is-danger' : ''}}" name="email" required="true" type="email" placeholder="j.snow@thewall.com" value="{{ old('email', '') }}">
<span class="icon is-small is-left"> <span class="icon is-small is-left">
<i class="fa fa-envelope"></i> <i class="fa fa-envelope"></i>
</span> </span>
@ -57,7 +58,7 @@
<div class="field"> <div class="field">
<label class="label has-text-light">Password</label> <label class="label has-text-light">Password</label>
<div class="control has-icons-left"> <div class="control has-icons-left">
<input class="input {{ getErrorFor('password') ? 'is-danger' : ''}}" name="password" type="password" placeholder="password"> <input class="input {{ getErrorFor('password') ? 'is-danger' : ''}}" id="txt-register-password" name="password" required="true" type="password" placeholder="password">
<span class="icon is-small is-left"> <span class="icon is-small is-left">
<i class="fa fa-lock"></i> <i class="fa fa-lock"></i>
</span> </span>
@ -67,7 +68,7 @@
<div class="field m-b-xxs"> <div class="field m-b-xxs">
<label class="label has-text-light">Confirm Password</label> <label class="label has-text-light">Confirm Password</label>
<div class="control has-icons-left"> <div class="control has-icons-left">
<input class="input" type="password" placeholder="confirm password"> <input class="input" type="password" id="txt-register-confirm-password" placeholder="confirm password" required="true">
<span class="icon is-small is-left"> <span class="icon is-small is-left">
<i class="fa fa-lock"></i> <i class="fa fa-lock"></i>
</span> </span>
@ -79,11 +80,11 @@
<div class="field is-grouped"> <div class="field is-grouped">
<div class="control"> <div class="control">
<label class="checkbox"> <label class="checkbox">
<input type="checkbox"> <input type="checkbox" id="chk-register-terms">
I agree to the <a href="#">terms and conditions</a> I agree to the <a href="#">terms and conditions</a>
</label> </label>
<div class="control"> <div class="control">
<button class="button is-link">Submit</button> <button id="btn-register-submit" class="button is-link" disabled="true">Submit</button>
</div> </div>
</div> </div>
</div> </div>

View file

@ -5,6 +5,7 @@ Seepur| Register
@endsection @endsection
@section('content') @section('content')
{{ script('scripts/views/register/app.bundle.js') }}
<h1 class="title"> <h1 class="title">
Register Register
</h1> </h1>
@ -13,12 +14,12 @@ Seepur| Register
Yep, It's Free Yep, It's Free
</p> </p>
<form class="form register" method="POST" action="{{ route('register') }}"> <form class="form register" method="POST" action="{{ route('register') }}" id="form-register">
{{ csrfField() }} {{ csrfField() }}
<div class="field"> <div class="field">
<label class="label">Name</label> <label class="label">Name</label>
<div class="control has-icons-left"> <div class="control has-icons-left">
<input class="input {{ getErrorFor('name') ? 'is-danger' : ''}}" name="name" type="text" placeholder="John Snow" value="{{ old('name', '') }}"> <input class="input {{ getErrorFor('name') ? 'is-danger' : ''}}" required="true" name="name" type="text" placeholder="John Snow" value="{{ old('name', '') }}">
<span class="icon is-small is-left"> <span class="icon is-small is-left">
<i class="fa fa-id-card"></i> <i class="fa fa-id-card"></i>
</span> </span>
@ -30,7 +31,7 @@ Seepur| Register
<div class="field"> <div class="field">
<label class="label">Email</label> <label class="label">Email</label>
<div class="control has-icons-left"> <div class="control has-icons-left">
<input class="input {{ getErrorFor('email') ? 'is-danger' : ''}}" name="email" type="email" placeholder="j.snow@thewall.com" value="{{ old('email', '') }}"> <input class="input {{ getErrorFor('email') ? 'is-danger' : ''}}" required="true" name="email" type="email" placeholder="j.snow@thewall.com" value="{{ old('email', '') }}">
<span class="icon is-small is-left"> <span class="icon is-small is-left">
<i class="fa fa-envelope"></i> <i class="fa fa-envelope"></i>
</span> </span>
@ -42,7 +43,7 @@ Seepur| Register
<div class="field"> <div class="field">
<label class="label">Password</label> <label class="label">Password</label>
<div class="control has-icons-left"> <div class="control has-icons-left">
<input class="input {{ getErrorFor('password') ? 'is-danger' : ''}}" name="password" type="password" placeholder="password"> <input id="txt-register-password" class="input {{ getErrorFor('password') ? 'is-danger' : ''}}" required="true" name="password" type="password" placeholder="password">
<span class="icon is-small is-left"> <span class="icon is-small is-left">
<i class="fa fa-lock"></i> <i class="fa fa-lock"></i>
</span> </span>
@ -52,7 +53,7 @@ Seepur| Register
<div class="field"> <div class="field">
<label class="label">Confirm Password</label> <label class="label">Confirm Password</label>
<div class="control has-icons-left"> <div class="control has-icons-left">
<input class="input" type="password" placeholder="confirm password"> <input id="txt-register-confirm-password" class="input" required="true" type="password" placeholder="confirm password">
<span class="icon is-small is-left"> <span class="icon is-small is-left">
<i class="fa fa-lock"></i> <i class="fa fa-lock"></i>
</span> </span>
@ -64,7 +65,7 @@ Seepur| Register
<div class="field"> <div class="field">
<div class="control"> <div class="control">
<label class="checkbox"> <label class="checkbox">
<input type="checkbox"> <input type="checkbox" id="chk-register-terms">
I agree to the <a href="#">terms and conditions</a> I agree to the <a href="#">terms and conditions</a>
</label> </label>
</div> </div>
@ -73,7 +74,7 @@ Seepur| Register
<div class="field is-grouped"> <div class="field is-grouped">
<div class="control"> <div class="control">
<button class="button is-link">Submit</button> <button id="btn-register-submit" class="button is-link" disabled="true">Submit</button>
</div> </div>
<div class="control"> <div class="control">
<a class="button is-link is-light" href='/'>Cancel</a> <a class="button is-link is-light" href='/'>Cancel</a>

View file

@ -11,8 +11,8 @@ const resolve = relativePath => path.resolve(__dirname, '..', relativePath);
module.exports = { module.exports = {
mode: 'development', mode: 'development',
entry: { entry: {
'components': './resources/scripts/components/navbar.ts', 'components/navbar': './resources/scripts/components/navbar.ts',
'views/register': './resources/scripts/views/register.ts',
// 'applications/story-time': // 'applications/story-time':
// './resources/scripts/applications/story-time/main.vue', // './resources/scripts/applications/story-time/main.vue',