package com.chickling.controllers; import com.google.gson.Gson; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; import com.chickling.models.AccountManager; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.io.UnsupportedEncodingException; import java.lang.reflect.Type; import java.security.NoSuchAlgorithmException; import java.sql.SQLException; import java.util.Map; /** * Account management and authority RESTful API * Created by ey67 on 2015/11/25. */ @Path("/account") public class Account { /*Log4J*/ Logger log = LogManager.getLogger(Account.class); /** * User Login * @param json [Login info account;password...] * @return [Login message token;...] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @POST @Path("/login") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response login(String json) { AccountManager accountManager=new AccountManager(); Type type = new TypeToken<Map>() {}.getType(); Gson gson = new Gson(); String account=""; String password=""; try { Map datas = gson.fromJson(json, type); account=(String) datas.get("account"); password=(String) datas.get("password"); }catch (JsonSyntaxException e){ log.error(e); return Response.ok(accountManager.message("error", e.getMessage())).build(); }catch (ClassCastException e){ log.error(e); return Response.ok(accountManager.message("error", "Json Class Cast Exception")).build(); } return Response.ok(accountManager.login(account,password)).build(); } /** * User Logout * @param token * @return [Logout message success?] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @GET @Path("/logout") @Produces(MediaType.APPLICATION_JSON) public Response logout(@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); return Response.ok(accountManager.logout(token)).build(); } /** * Add user [Only Admin] * @param json [user info ] * @param token * @return [message success?] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @POST @Path("/user/add") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response addUser(String json,@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); if(accountManager.isAdmin(token)) { Type type = new TypeToken<Map>() { }.getType(); Gson gson = new Gson(); try { Map datas = gson.fromJson(json, type); return Response.ok(accountManager.addUser((String) datas.get("username"), (String) datas.get("account"), (String) datas.get("password"), (String) datas.get("email"), ((Double) datas.get("group")).intValue(), ((Double) datas.get("level")).intValue(),(Boolean)datas.get("chartbuilder"))).build(); } catch (JsonSyntaxException e) { log.error(e); return Response.ok(accountManager.message("error", e.getMessage())).build(); } catch (NullPointerException e) { log.error(e); return Response.ok(accountManager.message("error", "Value can not be null")).build(); } catch (ClassCastException e) { log.error(e); return Response.ok(accountManager.message("error", "Json Class Cast Exception")).build(); } }else{ return Response.ok(accountManager.message("error", "Permission denied")).build(); } } /** * Add group [Only Admin] * @param json [group info ] * @param token * @return [message success?] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @POST @Path("/group/add") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response addGroup(String json,@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); if(accountManager.isAdmin(token)) { Type type = new TypeToken<Map>() { }.getType(); Gson gson = new Gson(); try { Map datas = gson.fromJson(json, type); return Response.ok(accountManager.addGroup((String) datas.get("group"), (String) datas.get("group_info"))).build(); } catch (JsonSyntaxException e) { log.error(e); return Response.ok(accountManager.message("error", e.getMessage())).build(); } catch (NullPointerException e) { log.error(e); return Response.ok(accountManager.message("error", "Value can not be null")).build(); } catch (ClassCastException e) { log.error(e); return Response.ok(accountManager.message("error", "Json Class Cast Exception")).build(); } }else { return Response.ok(accountManager.message("error", "Permission denied")).build(); } } /** * Update user data [Only Admin] * @param json [user info] * @param userID * @param token * @return [message success?] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @POST @Path("/user/update/{userid}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response updateUser(String json,@PathParam("userid") int userID,@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); if(accountManager.isAdmin(token)) { Type type = new TypeToken<Map>() { }.getType(); Gson gson = new Gson(); try { Map datas = gson.fromJson(json, type); return Response.ok(accountManager.updateUser(userID, (String) datas.get("username"), (String) datas.get("account"), (String) datas.get("password"), (String) datas.get("email"), ((Double) datas.get("group")).intValue(), ((Double) datas.get("level")).intValue(),(Boolean)datas.get("chartbuilder"))).build(); } catch (JsonSyntaxException e) { log.error(e); return Response.ok(accountManager.message("error", e.getMessage())).build(); } catch (NullPointerException e) { log.error(e); return Response.ok(accountManager.message("error", "Value can not be null")).build(); } catch (ClassCastException e) { log.error(e); return Response.ok(accountManager.message("error", "Json Class Cast Exception")).build(); } }else { return Response.ok(accountManager.message("error", "Permission denied")).build(); } } /** * Update user password * @param json [user old&new password] * @param userID * @param token * @return [message success?] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @POST @Path("/user/update/password/{userid}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response updatePassword(String json,@PathParam("userid") int userID,@HeaderParam("AUTHORIZATION") String token){ AccountManager accountManager=new AccountManager(); if(accountManager.isSelfToken(userID,token)) { Type type = new TypeToken<Map>() { }.getType(); Gson gson = new Gson(); try { Map datas = gson.fromJson(json, type); return Response.ok(accountManager.updatePassword(userID, (String) datas.get("password"), (String) datas.get("oldpassword"))).build(); } catch (JsonSyntaxException e) { log.error(e); return Response.ok(accountManager.message("error", e.getMessage())).build(); } catch (NullPointerException e) { log.error(e); return Response.ok(accountManager.message("error", "value can not be null")).build(); } catch (ClassCastException e) { log.error(e); return Response.ok(accountManager.message("error", "Json Class Cast Exception")).build(); } }else { return Response.ok(accountManager.message("error", "Permission denied")).build(); } } /** * Update Group info [Only Admin] * @param json [group info] * @param groupID * @param token * @return [message success?] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @POST @Path("/group/update/{groupid}") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Response updateGroup(String json,@PathParam("groupid") int groupID,@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); if(accountManager.isAdmin(token)) { Type type = new TypeToken<Map>() { }.getType(); Gson gson = new Gson(); try { Map datas = gson.fromJson(json, type); return Response.ok(accountManager.updateGroup(groupID, (String) datas.get("group"), (String) datas.get("group_info"))).build(); } catch (JsonSyntaxException e) { log.error(e); return Response.ok(accountManager.message("error", e.getMessage())).build(); } catch (NullPointerException e) { log.error(e); return Response.ok(accountManager.message("error", "Value can not be null")).build(); } catch (ClassCastException e) { log.error(e); return Response.ok(accountManager.message("error", "Json Class Cast Exception")).build(); } }else { return Response.ok(accountManager.message("error", "Permission denied")).build(); } } /** * List all user * @param token * @return [user info list] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @GET @Path("/user/list") @Produces(MediaType.APPLICATION_JSON) public Response getUserList(@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); if(accountManager.isAdmin(token)) { return Response.ok(accountManager.getUserList()).build(); }else { return Response.ok(accountManager.message("error", "Permission denied")).build(); } } /** * Get user info [Only Admin] * @param userID * @param token * @return [user info] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @GET @Path("/user/get/{userid}") @Produces(MediaType.APPLICATION_JSON) public Response getUserInfo(@PathParam("userid") int userID,@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); if(accountManager.isAdmin(token)) { return Response.ok(accountManager.getUserInfo(userID)).build(); }else { return Response.ok(accountManager.message("error", "Permission denied")).build(); } } /** * Get group list [Only Admin] * @param token * @return [group list] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @GET @Path("/group/list") @Produces(MediaType.APPLICATION_JSON) public Response getGroupList(@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); if(accountManager.isAdmin(token)) { return Response.ok(accountManager.getGroupList()).build(); }else { return Response.ok(accountManager.message("error", "Permission denied")).build(); } } /** * Delete User [Only Admin] * @param userID * @param token * @return [message success?] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @GET @Path("/user/delete/{userid}") @Produces(MediaType.APPLICATION_JSON) public Response delUser(@PathParam("userid") int userID,@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); if(accountManager.isAdmin(token)) { return Response.ok(accountManager.delUser(userID)).build(); }else { return Response.ok(accountManager.message("error", "Permission denied")).build(); } } /** * Delete Group [Only Admin] * @param groupID * @param token * @return [message success?] * @throws UnsupportedEncodingException * @throws SQLException * @throws NoSuchAlgorithmException */ @GET @Path("/group/delete/{groupid}") @Produces(MediaType.APPLICATION_JSON) public Response delGroup(@PathParam("groupid") int groupID,@HeaderParam("AUTHORIZATION") String token) { AccountManager accountManager=new AccountManager(); if(accountManager.isAdmin(token)) { return Response.ok(accountManager.delGroup(groupID)).build(); }else { return Response.ok(accountManager.message("error", "Permission denied")).build(); } } }