/*
* Copyright (c) 2008-2016 Computer Network Information Center (CNIC), Chinese Academy of Sciences.
*
* This file is part of Duckling project.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package cn.vlabs.umt.ui.user;
import java.io.IOException;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import cn.vlabs.umt.common.util.CommonUtils;
import cn.vlabs.umt.domain.UMTLog;
import cn.vlabs.umt.services.account.IAccountService;
import cn.vlabs.umt.services.session.SessionUtils;
import cn.vlabs.umt.services.user.UserService;
import cn.vlabs.umt.services.user.bean.LoginInfo;
import cn.vlabs.umt.ui.UMTContext;
/**
* 账户安全
* @author lvly
* @since 2013-1-29
*/
@Controller
@RequestMapping("/user/safe.do")
public class SafeController {
@Autowired
private IAccountService accountService;
@Autowired
private UserService userService;
/**
* 显示账户安全
* */
@RequestMapping
public String showSecurity(HttpServletRequest request, HttpServletResponse response){
return "/user/accountSafty_security";
}
//插入常用地
@RequestMapping(params="act=addCommon")
public void addCommon(HttpServletRequest request, HttpServletResponse response) throws IOException{
UMTContext context=new UMTContext(request);
int uid=context.getCurrentUMTUser().getId();
String country=request.getParameter("country");
String province=request.getParameter("province");
String city=request.getParameter("city");
UMTLog umtLog=new UMTLog();
umtLog.setUid(uid);
umtLog.setCountry(country);
umtLog.setProvince(province);
umtLog.setCity(city);
String result="";
if(CommonUtils.isNull(country)||CommonUtils.isNull(province)||CommonUtils.isNull(city)){
result="param.error";
}else if(accountService.isExitsCommonGEO(umtLog)){
result="geo.exists";
}else if(accountService.countCommonGEO(uid)>=5){
result="too.many";
}else{
accountService.addCommonGEO(umtLog);
result="add.success";
}
response.setContentType("text/html");
response.getWriter().print(result);
}
private void removeEquals(List<UMTLog> list,List<UMTLog> exits){
if(CommonUtils.isNull(list)){
return;
}
if(CommonUtils.isNull(exits)){
return;
}
Set<String> set=new HashSet<String>();
for(UMTLog exit:exits){
set.add(exit.getCountry()+"."+exit.getProvince()+"."+exit.getCity());
}
for(Iterator<UMTLog> it=list.iterator();it.hasNext();){
UMTLog log=it.next();
String key=log.getCountry()+"."+log.getProvince()+"."+log.getCity();
if(set.contains(key)){
it.remove();
}
}
}
//查询常用地
@RequestMapping(params="act=searchCommon")
public void searchCommon(HttpServletRequest request, HttpServletResponse response) throws IOException{
UMTContext context=new UMTContext(request);
int uid=context.getCurrentUMTUser().getId();
List<UMTLog> list=accountService.readCommonGEO(uid);
List<UMTLog> exits=accountService.getMyPreCommonUseGeos(uid);
removeEquals(list, exits);
String result="";
JSONArray jsonArray=new JSONArray();
if(CommonUtils.isNull(list)){
result=jsonArray.toJSONString();
}else{
for(UMTLog log:list){
if(log.isNullGEO()){
continue;
}
JSONObject jsonObject=new JSONObject();
jsonObject.put("country",log.getCountry());
jsonObject.put("province",log.getProvince());
jsonObject.put("city",log.getCity());
jsonObject.put("display", log.displayGEO());
jsonArray.add(jsonObject);
}
result=jsonArray.toJSONString();
}
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json");
response.getWriter().print(result);
}
//删除常用地
@RequestMapping(params="act=deleteCommon")
public void deleteCommon(HttpServletRequest request, HttpServletResponse response) throws IOException{
String idStr=request.getParameter("id");
boolean result=false;
if(!CommonUtils.isNull(idStr)){
int id=Integer.parseInt(idStr);
UMTContext context=new UMTContext(request);
int uid=context.getCurrentUMTUser().getId();
accountService.removeCommonGEO(id,uid);
result=true;
}
response.setContentType("text/html");
response.getWriter().print(result);
}
/**
* 显示日志
* */
@RequestMapping(params="act=showLog")
public String showLog(HttpServletRequest request, HttpServletResponse response){
int uid=SessionUtils.getUserId(request);
List<UMTLog> logs=accountService.getTopTenLogByEventType(uid, UMTLog.EVENT_TYPE_LOG_IN);
if(!CommonUtils.isNull(logs)){
for(UMTLog log:logs){
if(log.isSendWarnEmail()){
request.setAttribute("warnLog", log);
}
}
}
request.setAttribute("commonGEOs", accountService.getMyPreCommonUseGeos(uid));
request.setAttribute("loginMessage", logs);
request.setAttribute("changeSecurityEmailMessage", accountService.getTopTenLogByEventType(uid, UMTLog.EVENT_TYPE_CHANGE_SECURITY_EMAIL));
request.setAttribute("changePasswordMessage", accountService.getTopTenLogByEventType(uid, UMTLog.EVENT_TYPE_CHANGE_PASSWORD));
return "/user/accountSafty_log";
}
//更改邮件提醒
@RequestMapping(params="act=switchGEOEmail")
public String switchGEOEmail(HttpServletRequest request, HttpServletResponse response) throws IOException{
String value=request.getParameter("value");
boolean sendGEOEmailSwitch=Boolean.parseBoolean(value);
UMTContext context=new UMTContext(request);
LoginInfo info=context.getLoginInfo();
info.getUser().setSendGEOEmailSwitch(sendGEOEmailSwitch);
UMTContext.saveUser(request.getSession(), info);
userService.switchGEOInfo(info.getUser());
return "redirect:/user/safe.do?act=showLog";
}
}