Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
eff71ff
add hello world message
zgulde Dec 2, 2016
7a638aa
add counter servlet for /count
zgulde Dec 2, 2016
ff382d9
increase and display count when /count is visited
zgulde Dec 2, 2016
d3fff7c
add jstl dependency and example jsp page
zgulde Dec 2, 2016
bc7e559
add and include html template partials
zgulde Dec 2, 2016
2dc9ea2
add login and profile jsps
zgulde Dec 5, 2016
34bd264
check credentials when form is submitted
zgulde Dec 5, 2016
3604f19
add Ads interface and DAO implementation
zgulde Dec 2, 2016
f911119
show profile page from servlet
zgulde Dec 6, 2016
b034c36
move credential validation to servlet
zgulde Dec 6, 2016
1d22d9c
show all ads on ads index page
zgulde Dec 2, 2016
abc5b15
track login status
zgulde Dec 6, 2016
7b547d5
remove jsps from direct public access
zgulde Dec 7, 2016
a3fef90
insert ads in list dao
zgulde Dec 8, 2016
7293272
ad creation functionality
zgulde Dec 8, 2016
a20fe81
add mysql driver dependency
zgulde Dec 8, 2016
a7c1361
add migration script
zgulde Dec 6, 2016
70f7bd8
implement mysql ads dao
zgulde Dec 8, 2016
8e52d36
split project into packages
zgulde Dec 9, 2016
b4e9485
move configuration to external class
zgulde Dec 8, 2016
ed7b626
add users interface and model
zgulde Dec 9, 2016
fa01b25
plan out backend logic for user creation + login
zgulde Dec 9, 2016
844d3cd
use prepared statements for ad creation
zgulde Dec 9, 2016
66260b8
implement mysql users dao
zgulde Dec 9, 2016
ed6be17
add registration form
zgulde Dec 9, 2016
dbd48dd
persist users to database after registration
zgulde Dec 9, 2016
32c5dd5
check user credentials against database records
zgulde Dec 9, 2016
7a0c40f
store logged in user in the session
zgulde Dec 9, 2016
3aae064
add bcrypt dependency
zgulde Dec 9, 2016
35c03c6
add password utility class
zgulde Dec 9, 2016
84ca652
hash passwords
zgulde Dec 9, 2016
7249672
verify password hashes when logging in
zgulde Dec 9, 2016
f32e5ef
only allow ad creation if a user is logged in
zgulde Dec 9, 2016
9b42e04
added more Ad bean entities and updated migration file
Mar 20, 2023
7bfa8a7
Merge pull request #1 from A-J-K-M/additional-ad-entities
lexibor Mar 20, 2023
6696326
project pom updated, fresh databse adlister_db_project used for storage
Mar 20, 2023
2007931
added extra features and edited forms to match
Mar 20, 2023
282d8e1
Merge pull request #2 from A-J-K-M/implement-additional-entities
lexibor Mar 20, 2023
b786f3e
feat: added user specific navbar and edit profile servlet
KMHayles Mar 20, 2023
758032f
webapp folder given basic styling from style partial
Mar 20, 2023
c30ad1c
added a blank default image if no image is added on the ad
Mar 20, 2023
81a5a56
added seeder files
Mar 20, 2023
d00b87f
Merge pull request #3 from A-J-K-M/default-img
lexibor Mar 20, 2023
60dfe2d
feat: add bootstrap 5.3
KMHayles Mar 20, 2023
1e5e8ad
Merge pull request #4 from A-J-K-M/modified-navbar
lexibor Mar 20, 2023
e8f7613
functionality restored
Mar 20, 2023
751dab5
Merge branch 'main' into basic-styling
RydCri Mar 20, 2023
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
*.iml
target/
.idea/
Config.java
16 changes: 16 additions & 0 deletions adlister_seeder.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@

TRUNCATE table ads;
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE table users;
SET FOREIGN_KEY_CHECKS = 1;


INSERT INTO users(username, email, password) VALUES
('MikuHatsune', 'worldismine@email.com', '$2a$12$Ji/mV8KYcSht5MQyEFC.yOQGyOuXPoU.c8bBBVqS/UQd87/SKwAUK'),
('Yimothy', 'yimothy@yahoo.net', '$2a$12$33kjPr4iufbum3L37BLO6.nkLBqOplFO1AQTYGN7O0KqW4diamYSC');

INSERT INTO ads (user_id, title, description, img_url, gender, price, age) VALUES
(1, 'Dog', 'I dont know what it is', 'https://static.wikia.nocookie.net/warner-bros-entertainment/images/e/e5/Courage_cartoon_network.png','male',1, 20),
(1, 'Cat', 'Dont eat', 'https://upload.wikimedia.org/wikipedia/en/thumb/e/ed/Nyan_cat_250px_frame.PNG/220px-Nyan_cat_250px_frame.PNG', 'unknown', 100, 12);


27 changes: 27 additions & 0 deletions migration.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
CREATE DATABASE IF NOT EXISTS adlister_project_db;
USE adlister_project_db;

DROP TABLE IF EXISTS ads;
DROP TABLE IF EXISTS users;

CREATE TABLE users (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(240) NOT NULL,
email VARCHAR(240) NOT NULL,
password VARCHAR(255) NOT NULL,
PRIMARY KEY (id)
);

CREATE TABLE ads (
id INT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
title VARCHAR(240) NOT NULL,
description TEXT NOT NULL,
img_url VARCHAR(300) NOT NULL, #MAYBE ADD DEFAULT STATE IF NO IMG ADDED
gender VARCHAR(20) NOT NULL,
price DECIMAL(10, 2), # 12,345,678.90
age VARCHAR(128),
PRIMARY KEY (id),
FOREIGN KEY (user_id) REFERENCES users(id)
ON DELETE CASCADE
);
21 changes: 18 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,33 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<source>16</source>
<target>16</target>
</configuration>
</plugin>
</plugins>
</build>

<dependencies>
<dependency>
<groupId>org.mindrot</groupId>
<artifactId>jbcrypt</artifactId>
<version>0.4</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.32</version>
</dependency>
</dependencies>

Expand Down
9 changes: 0 additions & 9 deletions src/main/java/HelloWorldServlet.java

This file was deleted.

18 changes: 18 additions & 0 deletions src/main/java/com/codeup/adlister/controllers/AdsIndexServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.codeup.adlister.controllers;

import com.codeup.adlister.dao.DaoFactory;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "controllers.AdsIndexServlet", urlPatterns = "/ads")
public class AdsIndexServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("ads", DaoFactory.getAdsDao().all());
request.getRequestDispatcher("/WEB-INF/ads/index.jsp").forward(request, response);
}
}
50 changes: 50 additions & 0 deletions src/main/java/com/codeup/adlister/controllers/CreateAdServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.codeup.adlister.controllers;

import com.codeup.adlister.dao.DaoFactory;
import com.codeup.adlister.models.Ad;
import com.codeup.adlister.models.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "controllers.CreateAdServlet", urlPatterns = "/ads/create")
public class CreateAdServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (request.getSession().getAttribute("user") == null) {
response.sendRedirect("/login");
return;
}
request.getRequestDispatcher("/WEB-INF/ads/create.jsp")
.forward(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
User user = (User) request.getSession().getAttribute("user");

String img = request.getParameter("img_url");

if(img.isEmpty())
{
img = "https://core.trac.wordpress.org/raw-attachment/ticket/45927/placeholder-image-portrait.png";
}

Ad ad = new Ad(
user.getId(),
request.getParameter("title"),
request.getParameter("description"),
img,
request.getParameter("gender"),
Double.parseDouble(request.getParameter("price")),
Integer.parseInt(request.getParameter("age"))
);



DaoFactory.getAdsDao().insert(ad);
response.sendRedirect("/ads");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.codeup.adlister.controllers;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "controllers.EditProfileServlet", urlPatterns = "/edit-profile")
public class EditProfileServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (request.getSession().getAttribute("user") == null) {
response.sendRedirect("/login");
return;
}
request.getRequestDispatcher("/WEB-INF/editProfile.jsp")
.forward(request, response);
}
}
43 changes: 43 additions & 0 deletions src/main/java/com/codeup/adlister/controllers/LoginServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.codeup.adlister.controllers;

import com.codeup.adlister.dao.DaoFactory;
import com.codeup.adlister.models.User;
import org.mindrot.jbcrypt.BCrypt;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "controllers.LoginServlet", urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (request.getSession().getAttribute("user") != null) {
response.sendRedirect("/profile");
return;
}
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = DaoFactory.getUsersDao().findByUsername(username);

if (user == null) {
response.sendRedirect("/login");
return;
}
String hashedPassword = user.getPassword(); //hashed password
boolean validAttempt = BCrypt.checkpw(password, hashedPassword); //refactored to entered password to hashed password

if (validAttempt) {
request.getSession().setAttribute("user", user);
response.sendRedirect("/profile");
} else {
response.sendRedirect("/login");
}
}
}
15 changes: 15 additions & 0 deletions src/main/java/com/codeup/adlister/controllers/LogoutServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package com.codeup.adlister.controllers;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "controllers.LogoutServlet", urlPatterns = "/logout")
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
request.getRequestDispatcher("/WEB-INF/logout.jsp").forward(request,response);
}
}
41 changes: 41 additions & 0 deletions src/main/java/com/codeup/adlister/controllers/RegisterServlet.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.codeup.adlister.controllers;

import com.codeup.adlister.dao.DaoFactory;
import com.codeup.adlister.models.User;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "controllers.RegisterServlet", urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/register.jsp").forward(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
String username = request.getParameter("username");
String email = request.getParameter("email");
String password = request.getParameter("password");
String passwordConfirmation = request.getParameter("confirm_password");

// validate input
boolean inputHasErrors = username.isEmpty()
|| email.isEmpty()
|| password.isEmpty()
|| (! password.equals(passwordConfirmation));

if (inputHasErrors) {
response.sendRedirect("/register");
return;
}

// create and save a new user
User user = new User(username, email, password);
DaoFactory.getUsersDao().insert(user);
response.sendRedirect("/login");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package com.codeup.adlister.controllers;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "controllers.ViewProfileServlet", urlPatterns = "/profile")
public class ViewProfileServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
if (request.getSession().getAttribute("user") == null) {
response.sendRedirect("/login");
return;
}
request.getRequestDispatcher("/WEB-INF/profile.jsp").forward(request, response);
}
}
12 changes: 12 additions & 0 deletions src/main/java/com/codeup/adlister/dao/Ads.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.codeup.adlister.dao;

import com.codeup.adlister.models.Ad;

import java.util.List;

public interface Ads {
// get a list of all the ads
List<Ad> all();
// insert a new ad and return the new ad's id
Long insert(Ad ad);
}
21 changes: 21 additions & 0 deletions src/main/java/com/codeup/adlister/dao/DaoFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.codeup.adlister.dao;

public class DaoFactory {
private static Ads adsDao;
private static Users usersDao;
private static Config config = new Config();

public static Ads getAdsDao() {
if (adsDao == null) {
adsDao = new MySQLAdsDao(config);
}
return adsDao;
}

public static Users getUsersDao() {
if (usersDao == null) {
usersDao = new MySQLUsersDao(config);
}
return usersDao;
}
}
Loading