- if a user is logged in, the header shows:
the user's emaila logout button which makes a POST request to /logout
- if a user is not logged in, the header shows:
a link to the login page (/login)a link to the registration page (/register)
GET /
- ~if user is logged in:
(Minor) redirect to /urls
- if user is not logged in:
(Minor) redirect to /login
GET /urls
- if user is logged in:
- returns HTML with:
the site header (see Display Requirements above)- a list (or table) of URLs the user has created, each list item containing:
a short URLthe short URL's matching long URLan edit button which makes a GET request to /urls/:ida delete button which makes a POST request to /urls/:id/delete- (Stretch) the date the short URL was created
- (Stretch) the number of times the short URL was visited
- (Stretch) the number number of unique visits for the short URL
- (Minor) a link to "Create a New Short Link" which makes a GET request to /urls/new
- returns HTML with:
- if user is not logged in:
returns HTML with a relevant error message
GET /urls/new
- if user is logged in:
- returns HTML with:
the site header (see Display Requirements above)- a form which contains:
a text input field for the original (long) URLa submit button which makes a POST request to /urls
- returns HTML with:
- if user is not logged in:
redirects to the /login page
GET /urls/:id
- if user is logged in and owns the URL for the given ID:
- returns HTML with:
the site header (see Display Requirements above)the short URL (for the given ID)- a form which contains:
the corresponding long URLan update button which makes a POST request to /urls/:id
- (Stretch) the date the short URL was created
- (Stretch) the number of times the short URL was visited
- (Stretch) the number of unique visits for the short URL
- returns HTML with:
- if a URL for the given ID does not exist:
(Minor) returns HTML with a relevant error message
- if user is not logged in:
returns HTML with a relevant error message
- if user is logged in but does not own the URL with the given ID:
returns HTML with a relevant error message
GET /u/:id
- if URL for the given ID exists:
redirects to the corresponding long URL
- if URL for the given ID does not exist:
(Minor) returns HTML with a relevant error message
POST /urls
- if user is logged in:
generates a short URL, saves it, and associates it with the userredirects to /urls/:id, where :id matches the ID of the newly saved URL
- if user is not logged in:
(Minor) returns HTML with a relevant error message
POST /urls/:id
- if user is logged in and owns the URL for the given ID:
updates the URLredirects to /urls
- if user is not logged in:
(Minor) returns HTML with a relevant error message
- if user is logged it but does not own the URL for the given ID:
(Minor) returns HTML with a relevant error message
POST /urls/:id/delete
- if user is logged in and owns the URL for the given ID:
deletes the URLredirects to /urls
- if user is not logged in:
(Minor) returns HTML with a relevant error message
- if user is logged it but does not own the URL for the given ID:
(Minor) returns HTML with a relevant error message
GET /login
- if user is logged in:
(Minor) redirects to /urls
- if user is not logged in:
- returns HTML with:
- a form which contains:
input fields for email and passwordsubmit button that makes a POST request to /login
- a form which contains:
- returns HTML with:
GET /register
- if user is logged in:
(Minor) redirects to /urls
- if user is not logged in:
- returns HTML with:
- a form which contains:
input fields for email and passworda register button that makes a POST request to /register
- a form which contains:
- returns HTML with:
POST /login
- if email and password params match an existing user:
sets a cookieredirects to /urls
- if email and password params don't match an existing user:
returns HTML with a relevant error message
POST /register
- if email or password are empty:
returns HTML with a relevant error message
- if email already exists:
returns HTML with a relevant error message
- otherwise:
creates a new userencrypts the new user's password with bcryptsets a cookieredirects to /urls
POST /logout
deletes cookieredirects to /urls