Fixed merge conflict in reimbursinator/urls.py
This commit is contained in:
commit
be5c722eca
19 changed files with 264 additions and 69 deletions
|
@ -6,7 +6,7 @@ verify_ssl = true
|
||||||
[dev-packages]
|
[dev-packages]
|
||||||
|
|
||||||
[packages]
|
[packages]
|
||||||
django = "==1.10.7"
|
django = "==2.1.4"
|
||||||
gunicorn = "==19.6.0"
|
gunicorn = "==19.6.0"
|
||||||
|
|
||||||
[requires]
|
[requires]
|
||||||
|
|
0
back/backend/__init__.py
Normal file
0
back/backend/__init__.py
Normal file
5
back/backend/admin.py
Normal file
5
back/backend/admin.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
from django.contrib import admin
|
||||||
|
from .models import BackEnd
|
||||||
|
|
||||||
|
# Register your models here.
|
||||||
|
admin.site.register(BackEnd)
|
5
back/backend/apps.py
Normal file
5
back/backend/apps.py
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
from django.apps import AppConfig
|
||||||
|
|
||||||
|
|
||||||
|
class BackendConfig(AppConfig):
|
||||||
|
name = 'backend'
|
22
back/backend/migrations/0001_initial.py
Normal file
22
back/backend/migrations/0001_initial.py
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
# Generated by Django 2.1.5 on 2019-01-17 06:06
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
initial = True
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='BackEnd',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('title', models.CharField(max_length=200)),
|
||||||
|
('description', models.TextField()),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
0
back/backend/migrations/__init__.py
Normal file
0
back/backend/migrations/__init__.py
Normal file
13
back/backend/models.py
Normal file
13
back/backend/models.py
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
|
# Create your models here.
|
||||||
|
|
||||||
|
|
||||||
|
class BackEnd(models.Model):
|
||||||
|
title = models.CharField(max_length=200)
|
||||||
|
description = models.TextField()
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
"""A string representation of the model."""
|
||||||
|
return self.title
|
||||||
|
|
3
back/backend/tests.py
Normal file
3
back/backend/tests.py
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
from django.test import TestCase
|
||||||
|
|
||||||
|
# Create your tests here.
|
16
back/backend/views.py
Normal file
16
back/backend/views.py
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
from django.shortcuts import render
|
||||||
|
from django.http import JsonResponse
|
||||||
|
|
||||||
|
|
||||||
|
# Create your views here.
|
||||||
|
|
||||||
|
# each stub.
|
||||||
|
def profile(request):
|
||||||
|
data = {
|
||||||
|
'name': 'Vitor',
|
||||||
|
'location': 'Finland',
|
||||||
|
'is_active': True,
|
||||||
|
'count': 28
|
||||||
|
}
|
||||||
|
|
||||||
|
return JsonResponse(data)
|
0
back/manage.py
Normal file → Executable file
0
back/manage.py
Normal file → Executable file
|
@ -20,7 +20,7 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
|
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
|
||||||
|
|
||||||
# SECURITY WARNING: keep the secret key used in production secret!
|
# SECURITY WARNING: keep the secret key used in production secret!
|
||||||
SECRET_KEY = 'w*d2$rg#i88&6^9u2)jl0!4_)=_e1)0fxreofqzb(qxaw$3+$d'
|
SECRET_KEY = '5(ucf-232_)x@1ck($8ck=zwh%q=p++-0j@qh=835cuqh3ic-y'
|
||||||
|
|
||||||
# SECURITY WARNING: don't run with debug turned on in production!
|
# SECURITY WARNING: don't run with debug turned on in production!
|
||||||
DEBUG = True
|
DEBUG = True
|
||||||
|
|
|
@ -14,12 +14,8 @@ Including another URLconf
|
||||||
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
|
||||||
"""
|
"""
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
from django.conf.urls import url, include
|
from django.urls import path
|
||||||
# from django.urls import path, include
|
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
# path('admin/', admin.site.urls),
|
path('admin/', admin.site.urls),
|
||||||
# path('username/reports/', include('backend.urls'))
|
|
||||||
url(r'^admin/', admin.site.urls),
|
|
||||||
url(r'^username/reports/', include('backend.urls'))
|
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
version: '3.3'
|
version: '2.0'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
api:
|
api:
|
||||||
build: ./back
|
build: ./back
|
||||||
|
image: reimbursinator_back
|
||||||
command: gunicorn --bind 0.0.0.0:444 --keyfile /etc/ssl/private/selfsigned.key --certfile /etc/ssl/private/selfsigned.crt reimbursinator.wsgi:application
|
command: gunicorn --bind 0.0.0.0:444 --keyfile /etc/ssl/private/selfsigned.key --certfile /etc/ssl/private/selfsigned.crt reimbursinator.wsgi:application
|
||||||
#volumes:
|
#volumes:
|
||||||
# - ./app/:/usr/src/back/
|
# - ./app/:/usr/src/back/
|
||||||
|
@ -12,6 +13,7 @@ services:
|
||||||
- SECRET_KEY=please_change
|
- SECRET_KEY=please_change
|
||||||
web:
|
web:
|
||||||
build: ./front
|
build: ./front
|
||||||
|
image: reimbursinator_front
|
||||||
image: nginx:1.10.3
|
image: nginx:1.10.3
|
||||||
ports:
|
ports:
|
||||||
- "8443:443"
|
- "8443:443"
|
||||||
|
|
|
@ -1,38 +1,58 @@
|
||||||
<!DOCTYPE html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8" />
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="initial-scale=1, width=device-width" />
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous"/>
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
|
||||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
||||||
<title>Reimbursinator</title>
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
||||||
<link rel="shortcut icon" href="/favicon.ico" />
|
<link rel="shortcut icon" href="/favicon.ico">
|
||||||
</head>
|
<title>Reimbursinator</title>
|
||||||
<body>
|
</head>
|
||||||
<div class="container">
|
<body>
|
||||||
<div class="jumbotron"><h1>Reimbursinator Report</h1></div>
|
<nav class="navbar navbar-expand-sm navbar-dark bg-primary">
|
||||||
<nav class="navbar">
|
<a class="navbar-brand" href="#">Reimbursinator</a>
|
||||||
<ul class="nav nav-tabs mr-auto">
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsing-dashboard-navbar">
|
||||||
<li class="nav-item">
|
<span class="navbar-toggler-icon"></span>
|
||||||
<a class="nav-link active" href="#">New</a>
|
</button>
|
||||||
</li>
|
<div class="collapse navbar-collapse" id="collapsing-dashboard-navbar">
|
||||||
<li class="nav-item">
|
<ul class="navbar-nav ml-auto">
|
||||||
<a class="nav-link" href="#">Unfinished</a>
|
<li class="nav-item">
|
||||||
</li>
|
<a class="nav-link log-out-link" href="#">
|
||||||
<li class="nav-item">
|
<i class="fas fa-sign-out-alt"></i>
|
||||||
<a class="nav-link" href="#">History</a>
|
Log out
|
||||||
</li>
|
</a>
|
||||||
<li class="nav-item">
|
</li>
|
||||||
<a class="nav-link disabled" href="#">Others</a>
|
</ul>
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<ul class="nav justify-content-end">
|
|
||||||
<li class="nav-item">
|
|
||||||
<a class="nav-link" href="#">Logout</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</nav>
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</nav>
|
||||||
|
<div class="container">
|
||||||
|
<div class="jumbotron">
|
||||||
|
<h1>Reimbursinator Report</h1>
|
||||||
|
</div>
|
||||||
|
<nav class="navbar">
|
||||||
|
<ul class="nav nav-tabs mr-auto">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link active" href="#">New</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="#">Unfinished</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="#">History</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link disabled" href="#">Others</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<ul class="nav justify-content-end">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link log-out-link" href="#">Log out</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</nav>
|
||||||
|
</div>
|
||||||
|
<script src="logout.js"></script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -2,14 +2,37 @@
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="initial-scale=1, width=device-width">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
|
||||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
||||||
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico">
|
||||||
<title>Reimbursinator</title>
|
<title>Reimbursinator</title>
|
||||||
<link rel="shortcut icon" href="/favicon.ico" />
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
<nav class="navbar navbar-expand-sm navbar-dark bg-primary">
|
||||||
|
<a class="navbar-brand" href="#">Reimbursinator</a>
|
||||||
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsing-index-navbar">
|
||||||
|
<span class="navbar-toggler-icon"></span>
|
||||||
|
</button>
|
||||||
|
<div class="collapse navbar-collapse" id="collapsing-index-navbar">
|
||||||
|
<ul class="navbar-nav ml-auto">
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="login.html">
|
||||||
|
<i class="fas fa-sign-in-alt"></i>
|
||||||
|
Log in
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="signup.html">
|
||||||
|
<i class="fas fa-user-plus"></i>
|
||||||
|
Sign up
|
||||||
|
</a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<div class="jumbotron">
|
<div class="jumbotron">
|
||||||
<h1>Reimbursinator</h1>
|
<h1>Reimbursinator</h1>
|
||||||
|
@ -19,7 +42,7 @@
|
||||||
<a class="nav-link active" href="signup.html">Sign up</a>
|
<a class="nav-link active" href="signup.html">Sign up</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="nav-item">
|
<li class="nav-item">
|
||||||
<a class="nav-link" href="login.html">Login</a>
|
<a class="nav-link" href="login.html">Log in</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,18 +3,24 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
|
||||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
||||||
<title>Login</title>
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico">
|
||||||
|
<title>Log in</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Login Page</h1>
|
<nav class="navbar navbar-expand-sm navbar-dark bg-primary">
|
||||||
<form>
|
<a class="navbar-brand" href="index.html">Reimbursinator</a>
|
||||||
username: <input type="text" name="username" required><br>
|
</nav>
|
||||||
password: <input type="password" name="password" required><br>
|
<h1>Log in</h1>
|
||||||
<input type="submit" name="submit" value="submit">
|
<form method="POST">
|
||||||
</form>
|
username: <input type="text" name="username" required><br>
|
||||||
<!-- TODO: add script link here -->
|
password: <input type="password" name="password" required><br>
|
||||||
</body>
|
<input type="submit" name="submit" value="submit">
|
||||||
|
</form>
|
||||||
|
<p id="errorReport"><p>
|
||||||
|
<script src="login.js"></script>
|
||||||
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
45
front/static/login.js
Normal file
45
front/static/login.js
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
function displayErrorMessage(errorMessage) {
|
||||||
|
const errorReport = document.querySelector("#errorReport");
|
||||||
|
errorReport.innerHTML = JSON.parse(errorMessage).error;
|
||||||
|
}
|
||||||
|
|
||||||
|
function postToLoginEndpoint(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
const credentials = {
|
||||||
|
"username" : this.elements.username.value,
|
||||||
|
"password" : this.elements.password.value
|
||||||
|
}
|
||||||
|
const url = "https://reqres.in/api/login" // mock api service
|
||||||
|
const xhr = new XMLHttpRequest();
|
||||||
|
|
||||||
|
console.log(`User credentials:\n${JSON.stringify(credentials)}`);
|
||||||
|
|
||||||
|
xhr.open("POST", url, true);
|
||||||
|
xhr.setRequestHeader("Content-Type", "application/json");
|
||||||
|
xhr.onreadystatechange = function() {
|
||||||
|
if (this.readyState === 4) {
|
||||||
|
if (this.status === 200) {
|
||||||
|
console.log("LOGIN SUCCESS!");
|
||||||
|
console.log(`Server response:\n${this.response}`);
|
||||||
|
token = JSON.parse(this.response).token;
|
||||||
|
localStorage.setItem("token", token);
|
||||||
|
window.location.replace("dashboard.html");
|
||||||
|
} else {
|
||||||
|
console.log("LOGIN FAILURE!");
|
||||||
|
console.log(`Server status: ${this.status}`);
|
||||||
|
console.log(`Server response:\n${this.response}`);
|
||||||
|
displayErrorMessage(this.response);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.onerror = function() {
|
||||||
|
alert("Error connecting to the authentication server!");
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.send(JSON.stringify(credentials));
|
||||||
|
}
|
||||||
|
|
||||||
|
const form = document.querySelector("form");
|
||||||
|
form.addEventListener("submit", postToLoginEndpoint);
|
34
front/static/logout.js
Normal file
34
front/static/logout.js
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
function postToLogoutEndpoint(event) {
|
||||||
|
event.preventDefault();
|
||||||
|
|
||||||
|
const token = localStorage.getItem("token");
|
||||||
|
const url = "https://reqres.in/api/logout" // mock api service
|
||||||
|
const xhr = new XMLHttpRequest();
|
||||||
|
|
||||||
|
xhr.open("POST", url, true);
|
||||||
|
xhr.setRequestHeader("Authorization", `Token ${token}`);
|
||||||
|
xhr.onreadystatechange = function() {
|
||||||
|
if (this.readyState === 4) {
|
||||||
|
if (this.status === 200) {
|
||||||
|
console.log("LOGOUT SUCCESS!");
|
||||||
|
console.log(`Server response:\n${this.response}`);
|
||||||
|
localStorage.removeItem("token");
|
||||||
|
window.location.replace("index.html");
|
||||||
|
} else {
|
||||||
|
console.log("LOGOUT FAILURE!");
|
||||||
|
console.log(`Server status: ${this.status}`);
|
||||||
|
console.log(`Server response:\n${this.response}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.onerror = function() {
|
||||||
|
alert("Error connecting to authentication server!");
|
||||||
|
};
|
||||||
|
|
||||||
|
xhr.send();
|
||||||
|
}
|
||||||
|
|
||||||
|
const logoutLinks = document.querySelectorAll(".log-out-link");
|
||||||
|
logoutLinks[0].addEventListener("click", postToLogoutEndpoint);
|
||||||
|
logoutLinks[1].addEventListener("click", postToLogoutEndpoint);
|
|
@ -3,20 +3,25 @@
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css" integrity="sha384-UHRtZLI+pbxtHCWp1t77Bi1L4ZtiqrqD80Kn4Z8NTSRyMA2Fd33n5dQ8lWUE00s/" crossorigin="anonymous">
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
|
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/css/bootstrap.min.css" integrity="sha384-GJzZqFGwb1QTTN6wy59ffF1BuGJpLSa9DkKMp0DgiMDm4iYMj70gZWKYbI706tWS" crossorigin="anonymous">
|
||||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
|
||||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
|
||||||
|
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
||||||
|
<link rel="shortcut icon" href="/favicon.ico">
|
||||||
<title>Sign up</title>
|
<title>Sign up</title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Sign up page</h1>
|
<nav class="navbar navbar-expand-sm navbar-dark bg-primary">
|
||||||
<form id="signup">
|
<a class="navbar-brand" href="index.html">Reimbursinator</a>
|
||||||
User Name: <input type="text" id="userName" minlength="4" size="10" required="required"><br>
|
</nav>
|
||||||
Password: <input type="password" id="password" minlength="4" size="10" required="required"><br>
|
<h1>Sign up page</h1>
|
||||||
Confirm Password: <input type="password" id="confirmPassword"><br>
|
<form id="signup">
|
||||||
<input type="submit" value="Submit" formaction="index.html">
|
User Name: <input type="text" id="userName" minlength="4" size="10" required="required"><br>
|
||||||
<a class="nav-link" href="index.html">Return to main menu</a>
|
Password: <input type="password" id="password" minlength="4" size="10" required="required"><br>
|
||||||
</form>
|
Confirm Password: <input type="password" id="confirmPassword"><br>
|
||||||
|
<input type="submit" value="Submit" formaction="index.html">
|
||||||
|
<a class="nav-link" href="index.html">Return to main menu</a>
|
||||||
|
</form>
|
||||||
</body>
|
</body>
|
||||||
<script src="signupPage.js"></script>
|
<script src="signupPage.js"></script>
|
||||||
</html>
|
</html>
|
||||||
|
|
Loading…
Reference in a new issue