Skip to content
Snippets Groups Projects
Commit 4dac152c authored by Daniel's avatar Daniel
Browse files

TugasBesar2: IdentityService: Migrate project

parent ad91425f
No related merge requests found
Showing
with 451 additions and 0 deletions
plugins {
id 'java'
id 'war'
id 'org.akhikhl.gretty'
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile project(':SharedLibrary')
// https://mvnrepository.com/artifact/junit/junit
testCompile 'junit:junit:4.12'
// https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api
providedCompile 'javax.servlet:javax.servlet-api:4.0.0'
// https://mvnrepository.com/artifact/com.google.code.gson/gson
compile 'com.google.code.gson:gson:2.8.2'
// https://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-ri
gretty 'com.sun.xml.ws:jaxws-ri:2.3.0'
// https://mvnrepository.com/artifact/mysql/mysql-connector-java
gretty 'mysql:mysql-connector-java:8.0.8-dmr'
}
package com.adaapa.identityservice.models;
import com.adaapa.bean.UserBean;
import com.adaapa.models.BaseModel;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
public class UserModel extends BaseModel {
Connection conn;
public UserModel(){
super("users","id");
}
public UserBean parseResultSet(ResultSet rs) throws SQLException {
UserBean res = new UserBean();
res.id = rs.getInt("id");
res.name = rs.getString("name");
res.email = rs.getString("email");
res.username = rs.getString("username");
res.phoneNumber = rs.getString("phone_number");
return res;
}
public UserBean findUser(Integer id) {
UserBean res = null;
try {
ResultSet rs = find(id);
if (rs.next()) {
res = parseResultSet(rs);
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
public UserBean findUser(String username) {
UserBean res = null;
try {
ResultSet rs = query(String.format("SELECT * FROM %s WHERE username = '%s'", tableName, username ));;
if (rs.next()) {
res = parseResultSet(rs);
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
public UserBean findUserByEmail(String email) {
UserBean res = null;
try {
ResultSet rs = query(String.format("SELECT * FROM %s WHERE email = '%s'", tableName, email));
;
if (rs.next()) {
res = parseResultSet(rs);
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
/**
*
* @param username Username yang diterima oleh servlet
* @param password Password yang diterima oleh servlet
* @return UserBean object jika terautentikasi, null jika tidak
*/
public UserBean authenticate(String username, String password) {
UserBean ubean = null;
try {
ResultSet rs = query(String.format(
"SELECT * FROM %s WHERE username = '%s' and password = '%s'",
tableName, username, password));
if(rs.next()) {
ubean = parseResultSet(rs);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
return ubean;
}
}
/**
* Menyimpan token yang telah digenerate
* @param token token yang sudah digenerate oleh generate token
* @return true jika token berhasil disimpan, false jika tidak berhasil
*/
public Boolean saveToken(Integer userId, String token) {
try {
ResultSet rs = queryUpdate(String.format(
"UPDATE %s SET last_token='%s',token_expire=DATE_ADD(now(), INTERVAL 7 DAY) where id=%d", this.tableName, token, userId
));
} catch (SQLException e) {
e.printStackTrace();
}
return true;
}
public Boolean deleteToken(String token) {
try {
ResultSet rs = queryUpdate(String.format(
"UPDATE %s SET last_token=%s,token_expire=%s WHERE last_token='%s'",this.tableName,null,null,token
));
} catch (SQLException e) {
e.printStackTrace();
return false;
}
return true;
}
/**
*
* @return Userbean dimana token ditemukan, null validasi gagal
*/
public UserBean validateToken() {
return null;
}
/**
* Fungsi untuk menyimpan data user yang akan diregister ke database
* @param user bean dari servlet
* @param password password yang diterima oleh servlet
* @return id yang didapatkan oleh user yang teregister, null jika register gagal
*/
public Integer register(UserBean user, String password) {
UserBean ubean = null;
Integer res = null;
UserBean ubeanuname = findUser(user.getUsername());
UserBean ubeanemail = findUserByEmail(user.getEmail());
if(ubeanuname == null && ubeanemail == null) {
ResultSet resultSet = null;
try {
resultSet = queryUpdate(String.format(
"INSERT INTO %s (name,email,username,password,phone_number)"
+ "VALUES ('%s','%s','%s','%s','%s')",
tableName,user.name,user.email,user.username, password, user.phoneNumber
));
} catch (Exception e) {
e.printStackTrace();
}
try {
ResultSet temp = query(String.format(
"SELECT * FROM %s WHERE username = '%s'", this.tableName, user.getUsername()));
if(temp.next()) {
ubean = parseResultSet(temp);
}
} catch (Exception e) {
e.printStackTrace();
}
res = ubean.getId();
}
return res;
}
public UserBean findUserByToken(String token) {
UserBean res = null;
try {
ResultSet rs = query(String.format("SELECT * FROM %s WHERE last_token = '%s'", tableName, token ));;
if (rs.next()) {
Timestamp timestamp = rs.getTimestamp("token_expire");
Timestamp currentTimestamp = new Timestamp(System.currentTimeMillis());
if(timestamp.after(currentTimestamp)) {
res = parseResultSet(rs);
}
}
} catch (Exception e) {
e.printStackTrace();
}
return res;
}
public void updateTokenLifetime(Integer userId) {
try {
ResultSet rs = queryUpdate(String.format(
"UPDATE %s SET token_expire=DATE_ADD(now(), INTERVAL 7 DAY) where id=%d", this.tableName, userId
));
} catch (SQLException e) {
e.printStackTrace();
}
}
}
\ No newline at end of file
package com.adaapa.identityservice.services;
import java.util.Base64;
import java.util.Random;
public class TokenService {
//TODO: generate Token
/**
* Generate token menghasilkan token string random
* @return token yang telah digenerate
*/
//TODO:Generate Token, validate token, regenerate token(bonus)
public String generateToken(){
byte [] r = new byte[96];
Random rand = new Random();
rand.nextBytes(r);
String s = Base64.getEncoder().encodeToString(r);
return s;
}
}
package com.adaapa.identityservice.servlets;
import com.adaapa.bean.LoginResponseBean;
import com.adaapa.bean.UserBean;
import com.adaapa.identityservice.models.UserModel;
import com.adaapa.identityservice.services.TokenService;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Created by kennethhalim on 10/26/17.
*/
public class LoginServlet extends HttpServlet {
private String message;
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
TokenService tokenService = new TokenService();
String username = req.getParameter("username");
String password = req.getParameter("password");
PrintWriter out = resp.getWriter();
Gson gson = new Gson();
UserModel userModel = new UserModel();
UserBean user= userModel.authenticate(username, password);
UserBean responseUser = new UserBean();
if(user != null) {
//Call Generate token here, then save it to database via usermodel;
responseUser.username = user.username;
String access_token = tokenService.generateToken();
userModel.saveToken(user.id, access_token);
out.println(gson.toJson(new LoginResponseBean("accepted",access_token, LoginResponseBean.TOKEN_AGE_DEFAULT, responseUser)));
} else {
out.println(gson.toJson(new LoginResponseBean("failed","",0,null)));
}
}
public void destroy() {
// do nothing.
}
}
package com.adaapa.identityservice.servlets;
import com.adaapa.bean.LogoutResponseBean;
import com.adaapa.identityservice.models.UserModel;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class LogoutServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String token = req.getParameter("access_token");
UserModel userModel = new UserModel();
PrintWriter out = resp.getWriter();
LogoutResponseBean logoutResponse = new LogoutResponseBean();
if(userModel.deleteToken(token)){
logoutResponse.setStatus("accepted");
} else {
logoutResponse.setStatus("failed");
}
Gson gson = new Gson();
out.println(gson.toJson(logoutResponse));
}
}
package com.adaapa.identityservice.servlets;
import com.adaapa.bean.LoginResponseBean;
import com.adaapa.bean.UserBean;
import com.adaapa.identityservice.models.UserModel;
import com.adaapa.identityservice.services.TokenService;
import com.google.gson.Gson;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class RegisterServlet extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//Implement Register Here
UserBean user = new UserBean();
UserModel userModel = new UserModel();
UserModel usermodel = new UserModel();
TokenService tokenService = new TokenService();
//Parsing data
PrintWriter out = resp.getWriter();
user.name = req.getParameter("name");
user.username = req.getParameter("username");
user.email = req.getParameter("email");
user.phoneNumber = req.getParameter("phoneNumber");
String password = req.getParameter("password");
Gson gson = new Gson();
user.id = userModel.register(user,password);
UserBean responseUser = new UserBean();
if(user.id != null) {
//Register berhasil
//Generate token here, then save token
String token = tokenService.generateToken();
userModel.saveToken(user.id, token);
responseUser.username = user.username;
out.println(gson.toJson(new LoginResponseBean("accepted",token, LoginResponseBean.TOKEN_AGE_DEFAULT, responseUser)));
} else {
out.println(gson.toJson(new LoginResponseBean("failed","",0,null)));
}
}
}
\ No newline at end of file
package com.adaapa.identityservice.servlets;
import com.adaapa.bean.TokenVerificationResponse;
import com.adaapa.bean.UserBean;
import com.adaapa.identityservice.models.UserModel;
import com.google.gson.Gson;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
@WebService(targetNamespace = "tokenverifier.adaapa.com")
public class TokenVerifier {
@WebMethod(operationName = "verifyToken")
@WebResult(name = "userObjectInJSON")
public String verifyToken(@WebParam(name = "access_token") String access_token) {
UserModel userModel = new UserModel();
UserBean userBean = userModel.findUserByToken(access_token);
TokenVerificationResponse response = new TokenVerificationResponse();
if(userBean != null){
userModel.updateTokenLifetime(userBean.getId());
response.setStatus(TokenVerificationResponse.TOKEN_VALID);
response.setUser(userBean);
} else {
response.setStatus(TokenVerificationResponse.TOKEN_INVALID);
}
return (new Gson().toJson(response));
}
}
DB_HOST = localhost
DB_USER = wbd
DB_PASS = wbd123
DB_NAME = wbd_idservice
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<endpoints
xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint
name="TokenVerifier"
implementation="com.adaapa.identityservice.servlets.TokenVerifier"
url-pattern="/verify"/>
</endpoints>
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.adaapa.identityservice.servlets.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/login</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LogoutServlet</servlet-name>
<servlet-class>com.adaapa.identityservice.servlets.LogoutServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LogoutServlet</servlet-name>
<url-pattern>/logout</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>RegisterServlet</servlet-name>
<servlet-class>com.adaapa.identityservice.servlets.RegisterServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RegisterServlet</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>web-jaxws</servlet-name>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>web-jaxws</servlet-name>
<url-pattern>/soap</url-pattern>
</servlet-mapping>
</web-app>
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment