Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Authorization and authentication #193

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added server/db.sqlite3
Binary file not shown.
5 changes: 5 additions & 0 deletions server/djangoapp/templates/djangoapp/about.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<html>
<h1>
Welcome to Best Cars dealership, home to the best cars in North America. We sell domestic and imported cars at reasonable prices.
</h1>
</html>
9 changes: 9 additions & 0 deletions server/djangoapp/templates/djangoapp/contact.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<html>
<h1>
Contact Us
</h1>
<div>
<h2>Address: IBM, final exam, congnitiveclass ai, North America</h2>
<h2>Contact: +01-12345689</h2>
</div>
</html>
31 changes: 27 additions & 4 deletions server/djangoapp/templates/djangoapp/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,33 @@
</head>

<body>
<!-- Remove this line the first time you edit this file -->
This is the index page of your Django app!
<!--Add a nav bar here -->

<nav class="navbar navbar-light bg-light">
<div class="container-fluid">
<div class="navbar-header">
<a class="navbar-brand" href="#">Dealership Review</a>
</div>
<ul class="nav navbar-nav navbar-right">
{% if user.is_authenticated %}
<li>
<a class="btn btn-link" href="#">{{ user.first_name }}({{ user.username }})</a>
<a class="btn btn-link" href="{% url 'djangoapp:logout' %}">Logout</a>
</li>
{% else %}
<li>
<form class="form-inline" action="{% url 'djangoapp:login' %}" method="post">
{% csrf_token %}
<div class="input-group">
<input type="text" class="form-control" placeholder="Username" name="username" >
<input type="password" class="form-control" placeholder="Password" name="psw" >
<button class="btn btn-primary" type="submit">Login</button>
<a class="btn btn-link" href="{% url 'djangoapp:registration' %}">Sign Up</a>
</div>
</form>
</li>
{% endif %}
</ul>
</div>
</nav>
<!--Add a dealer table here -->

</body>
Expand Down
18 changes: 18 additions & 0 deletions server/djangoapp/templates/djangoapp/login.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<form action="{% url 'djangoapp:login' %}" method="post">
{% csrf_token %}
<div class="container"> <!--Style root div with .container class -->
<h1>Login</h1>
<div class="form-group"> <!--Style second div with .form-group class -->
<label for="username"><b>User Name</b></label>
<input id="username" class = "form-control" type="text" placeholder="Enter User Name: " name="username" required> <!--Style input with .form-control class -->
<label for="psw"><b>Password</b></label>
<input id="psw" class = "form-control" type="password" placeholder="Enter Password: " name="psw" required> <!--Style input with .form-control class -->
</div>
{% if message %}
<div class="alert alert-warning"> <!--Style the message paragraph with .alert and .alert-warning class -->
{{ message }}
</div>
{% endif %}
<button class="btn btn-primary" type="submit">Login</button> <!--Style button with .btn and .btn-primary class -->
</div>
</form>
24 changes: 23 additions & 1 deletion server/djangoapp/templates/djangoapp/registration.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,28 @@
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<!--Add a registration form here -->
<form action="{% url 'djangoapp:registration' %}" method="post">
<div class="container"> <!--Style root div with .container class -->
{% csrf_token %}
<h1>Sign Up</h1>
<hr>
<div class="form-group"> <!--Style second div with .form-group class -->
<label for="username"><b>User Name</b></label>
<input type="text" class="form-control" placeholder="Enter User Name: " name="username" required> <!--Style input with .form-control class -->
<label for="firstname"><b>First Name</b></label>
<input type="text" class="form-control" placeholder="Enter First Name: " name="firstname" required> <!--Style input with .form-control class -->
<label for="lastname"><b>Last Name</b></label>
<input type="text" class="form-control" placeholder="Enter Last Name: " name="lastname" required> <!--Style input with .form-control class -->
<label for="psw"><b>Password</b></label>
<input type="password" class="form-control" placeholder="Enter Password: " name="psw" required> <!--Style input with .form-control class -->
{% if message %}
<div class="alert alert-warning"> <!--Style the message paragraph with .alert and .alert-warning class -->
{{ message }}
</div>
{% endif %}
<button class="btn mt-3 btn-primary" type="submit">Sign up</button> <!--Style button with .btn and .btn-primary class -->
</div>
</div>
</form>
</body>
</html>
11 changes: 5 additions & 6 deletions server/djangoapp/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,14 @@
# view refers to the view function
# name the URL

# path for about view
path(route='about', view=views.about, name='about'),

# path for contact us view
path(route='contact', view=views.contact, name='contact'),

# path for registration
path('registration/', views.registration_request, name='registration'),

# path for login

# path for logout
path('login/', views.login_request, name='login'),
path('logout/', views.logout_request, name='logout'),

path(route='', view=views.get_dealerships, name='index'),

Expand Down
97 changes: 81 additions & 16 deletions server/djangoapp/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,35 +20,100 @@
# Create an `about` view to render a static about page
# def about(request):
# ...
def about(request):
return render(request, 'djangoapp/about.html')


# Create a `contact` view to return a static contact page
#def contact(request):
def contact(request):
return render(request,'djangoapp/contact.html')

# Create a `login_request` view to handle sign in request
# def login_request(request):
# ...
def login_request(request):
context = {}
if request.method == "POST":
username = request.POST['username']
password = request.POST['psw']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
return redirect('djangoapp:index')
else:
context['message'] = "Invalid username or password."
return render(request, 'djangoapp/login.html', context)
else:
return render(request, 'djangoapp/login.html', context)

# Create a `logout_request` view to handle sign out request
# def logout_request(request):
# ...
def logout_request(request):
logout(request)
return redirect('djangoapp:index')

# Create a `registration_request` view to handle sign up request
# def registration_request(request):
# ...
def registration_request(request):
context = {}
if request.method == 'GET':
return render(request, 'djangoapp/registration.html', context)
elif request.method == 'POST':
# Check if user exists
username = request.POST['username']
password = request.POST['psw']
first_name = request.POST['firstname']
last_name = request.POST['lastname']
user_exist = False
try:
User.objects.get(username=username)
user_exist = True
except:
logger.error("New user")
if not user_exist:
user = User.objects.create_user(username=username, first_name=first_name, last_name=last_name,
password=password)
login(request, user)
return redirect("djangoapp:index")
else:
context['message'] = "User already exists."
return render(request, 'djangoapp/registration.html', context)

# Update the `get_dealerships` view to render the index page with a list of dealerships
def get_dealerships(request):
context = {}
if request.method == "GET":
context = {}
# url = "https://sankettikam1-8000.theiadockernext-1-labs-prod-theiak8s-4-tor01.proxy.cognitiveclass.ai/dealerships/get"
# dealerships = get_dealers_from_cf(url)
# context['dealerships'] = dealerships
return render(request, 'djangoapp/index.html', context)

# Create a `get_dealer_details` view to render tdealershipshe reviews of a dealer
def get_dealer_details(request, dealer_id):
if request.method == "GET":
context = {}
# Get dealers from the URL
url = "https://sankettikam1-8000.theiadockernext-1-labs-prod-theiak8s-4-tor01.proxy.cognitiveclass.ai/dealerships/get"
dealer = get_dealer_by_id_from_cf(url, dealer_id)

# Create a `get_dealer_details` view to render the reviews of a dealer
# def get_dealer_details(request, dealer_id):
# ...
url = "https://sankettikam1-8000.theiadockernext-1-labs-prod-theiak8s-4-tor01.proxy.cognitiveclass.ai/reviews/get"
reviews = get_dealer_reviews_from_cf(url, dealer_id)
context['reviews'] = reviews
context['dealer'] = dealer
return render(request, 'djangoapp/dealer_details.html', context)


# Create a `add_review` view to submit a review
# def add_review(request, dealer_id):
# ...

def add_review(request, dealer_id):
if request.method == "POST":
review = dict()
review["time"] = datetime.utcnow().isoformat()
review["dealership"] = dealer_id
review["review"] = request.POST.get('review', '')
review["purchase"] = request.POST.get('purchase', '')
review["purchase_date"] = request.POST.get('purchase_date')
review["name"] = request.POST.get('name', '')
review["car_make"] = request.POST.get('car_make')
review["car_model"] = request.POST.get('car_model')
review["car_year"] = request.POST.get('car_year')
url = "https://sankettikam1-8000.theiadockernext-1-labs-prod-theiak8s-4-tor01.proxy.cognitiveclass.ai/reviews/post"
res = post_request(url, review)
return redirect("djangoapp:dealer_details", dealer_id=dealer_id)
url = "https://sankettikam1-8000.theiadockernext-1-labs-prod-theiak8s-4-tor01.proxy.cognitiveclass.ai/dealerships/get"
dealer = get_dealer_by_id_from_cf(url, dealer_id)
cars = CarModel.objects.all()
return render(request, 'djangoapp/add_review.html', {"dealer": dealer, "cars": cars})