2024-11-25 16:19:05 +02:00
from django . contrib . auth . models import User
2024-11-24 17:58:53 +02:00
from django . http import HttpResponseRedirect
2024-11-24 16:11:22 +02:00
from django . contrib . auth . decorators import login_required
2024-11-25 16:19:05 +02:00
from django . contrib . auth . validators import UnicodeUsernameValidator
2024-11-24 16:11:22 +02:00
from django . contrib . auth import authenticate , login , logout
2024-11-25 16:19:05 +02:00
from django . contrib . auth . password_validation import validate_password
2024-11-24 16:11:22 +02:00
from django . shortcuts import render , redirect
from django . views . decorators . csrf import csrf_exempt
2024-11-24 17:58:53 +02:00
from django . db import connection
2024-11-25 16:19:05 +02:00
from django . core . exceptions import ValidationError
2024-11-24 16:45:26 +02:00
2024-11-24 17:58:53 +02:00
from notes . models import Note
2024-11-24 16:11:22 +02:00
@login_required ( )
def index ( request ) :
2024-11-24 16:45:26 +02:00
user = request . user
2024-11-24 17:58:53 +02:00
notes = Note . objects . filter ( owner = user )
notes_list = [ { ' time ' : note . time , ' body ' : note . body , ' id ' : note . id } for note in notes ]
notes_list . sort ( key = lambda note : note [ ' time ' ] )
return render ( request , ' index.html ' , { ' notes ' : notes_list } )
@login_required ( )
def add ( request ) :
if request . method == ' POST ' :
user = request . user
body = request . POST . get ( ' body ' )
Note . objects . create ( owner = user , body = body )
return redirect ( " index " )
@login_required ( )
def remove ( request , note_id ) :
if request . method == ' POST ' :
note = Note . objects . get ( pk = note_id )
2024-11-25 16:33:17 +02:00
# FLAW 1:
# Adding an ownership check would fix the problem
# user = request.user
# if user == note.owner:
note . delete ( )
2024-11-24 17:58:53 +02:00
return HttpResponseRedirect ( request . META . get ( ' HTTP_REFERER ' , ' index ' ) )
@login_required ( )
def search ( request ) :
if request . method == ' GET ' :
user = request . user
keyword = request . GET . get ( ' keyword ' )
notes = Note . objects . filter ( owner = user , body__icontains = keyword )
notes_list = [ { ' time ' : note . time , ' body ' : note . body , ' id ' : note . id } for note in notes ]
notes_list . sort ( key = lambda note : note [ ' time ' ] )
return render ( request , ' search.html ' , { ' notes ' : notes_list , ' keyword ' : keyword } )
return redirect ( " index " )
2024-11-24 16:45:26 +02:00
2024-11-24 16:11:22 +02:00
def login_view ( request ) :
if request . method == ' GET ' :
return render ( request , ' login.html ' )
elif request . method == ' POST ' :
username = request . POST . get ( ' username ' )
password = request . POST . get ( ' password ' )
user = authenticate ( username = username , password = password )
if user is not None :
login ( request , user )
return redirect ( " index " )
else :
return render ( request , ' login.html ' , { ' login_failed ' : True } )
2024-11-24 17:58:53 +02:00
2024-11-24 16:11:22 +02:00
return redirect ( " index " )
2024-11-24 17:58:53 +02:00
2024-11-25 16:19:05 +02:00
def register_view ( request ) :
if request . method == ' POST ' :
errors = [ ]
username = request . POST . get ( ' username ' )
password1 = request . POST . get ( ' password1 ' )
password2 = request . POST . get ( ' password2 ' )
# Username validation
if User . objects . filter ( username = username ) . first ( ) != None :
errors . append ( " Username in use. " )
try :
username_validator = UnicodeUsernameValidator ( )
username_validator ( username )
except ValidationError as error :
for message in error . messages :
errors . append ( message )
# Password validation
if password1 != password2 :
errors . append ( " Passwords don ' t match. " )
try :
validate_password ( password1 )
except ValidationError as error :
for message in error . messages :
errors . append ( message )
if not errors :
user = User . objects . create_user ( username = username , password = password1 )
login ( request , user )
return redirect ( " index " )
else :
return render ( request , ' login.html ' , { ' registration_errors ' : errors } )
return redirect ( " index " )
2024-11-24 16:11:22 +02:00
def logout_view ( request ) :
if request . method == ' POST ' :
logout ( request )
2024-11-24 17:58:53 +02:00
2024-11-24 16:11:22 +02:00
return redirect ( " index " )