package com.mossle.android.rs; import java.util.Date; import java.util.UUID; import javax.annotation.Resource; import javax.ws.rs.FormParam; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.mossle.api.user.AccountStatus; import com.mossle.api.user.AuthenticationHandler; import com.mossle.api.user.UserConnector; import com.mossle.api.user.UserDTO; import com.mossle.core.mapper.JsonMapper; import com.mossle.core.util.BaseDTO; import com.mossle.pim.persistence.domain.PimDevice; import com.mossle.pim.persistence.manager.PimDeviceManager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component @Path("android") public class AndroidDeviceResource { private static Logger logger = LoggerFactory .getLogger(AndroidDeviceResource.class); private PimDeviceManager pimDeviceManager; private AuthenticationHandler authenticationHandler; private UserConnector userConnector; private JsonMapper jsonMapper = new JsonMapper(); @POST @Path("login") @Produces(MediaType.APPLICATION_JSON) public BaseDTO login(@FormParam("username") String username, @FormParam("password") String password, @FormParam("code") String code, @FormParam("type") String type, @FormParam("name") String name) { logger.info( "username : {}, password : {}, code : {}, type : {}, name : {}", username, "***", code, type, name); if (username == null) { BaseDTO result = new BaseDTO(); result.setCode(400); result.setMessage("username is null"); logger.info("username is null"); return result; } username = username.toLowerCase(); try { PimDevice pimDevice = pimDeviceManager.findUniqueBy("code", code); if ((pimDevice != null) && (!"active".equals(pimDevice.getStatus()))) { BaseDTO result = new BaseDTO(); result.setCode(403); result.setMessage("device is " + pimDevice.getStatus()); logger.info("device is " + pimDevice.getStatus()); return result; } String response = authenticationHandler.doAuthenticate(username, password, "normal"); if (!AccountStatus.SUCCESS.equals(response)) { BaseDTO result = new BaseDTO(); result.setCode(401); result.setMessage("authenticate fail, " + response); logger.info("authenticate fail, " + response); return result; } if (pimDevice == null) { UserDTO userDto = userConnector.findByUsername(username, "1"); pimDevice = new PimDevice(); pimDevice.setName(name); pimDevice.setCode(code); pimDevice.setType(type); pimDevice.setStatus("active"); pimDevice.setCreateTime(new Date()); pimDevice.setUserId(userDto.getId()); UUID uuid = UUID.randomUUID(); pimDevice.setSessionId(uuid.toString()); pimDeviceManager.save(pimDevice); } else { UserDTO userDto = userConnector.findByUsername(username, "1"); UUID uuid = UUID.randomUUID(); pimDevice.setSessionId(uuid.toString()); pimDevice.setUserId(userDto.getId()); pimDeviceManager.save(pimDevice); } BaseDTO result = new BaseDTO(); result.setCode(200); result.setData(pimDevice.getSessionId()); return result; } catch (Exception ex) { logger.error(ex.getMessage(), ex); BaseDTO result = new BaseDTO(); result.setCode(500); result.setMessage(ex.getMessage()); return result; } } @POST @Path("checkLogin") @Produces(MediaType.APPLICATION_JSON) public BaseDTO checkLogin(@HeaderParam("sessionId") String sessionId) { logger.info("sessionId : {}", sessionId); PimDevice pimDevice = pimDeviceManager.findUniqueBy("sessionId", sessionId); logger.info("pimDevice : {}", pimDevice); if (pimDevice == null) { return null; } BaseDTO result = new BaseDTO(); result.setCode(200); return result; } @POST @Path("logout") @Produces(MediaType.APPLICATION_JSON) public BaseDTO logout(@HeaderParam("sessionId") String sessionId) { PimDevice pimDevice = pimDeviceManager.findUniqueBy("sessionId", sessionId); if (pimDevice != null) { pimDevice.setSessionId(null); pimDeviceManager.save(pimDevice); } BaseDTO result = new BaseDTO(); result.setCode(200); return result; } // ~ ====================================================================== @Resource public void setPimDeviceManager(PimDeviceManager pimDeviceManager) { this.pimDeviceManager = pimDeviceManager; } @Resource public void setAuthenticationHandler( AuthenticationHandler authenticationHandler) { this.authenticationHandler = authenticationHandler; } @Resource public void setUserConnector(UserConnector userConnector) { this.userConnector = userConnector; } }