/* * 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.controller; import java.io.IOException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import net.duckling.cloudy.common.CommonUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import cn.vlabs.umt.common.EmailUtil; import cn.vlabs.umt.services.session.SessionUtils; import cn.vlabs.umt.services.user.LoginService; import cn.vlabs.umt.services.user.UserService; import cn.vlabs.umt.services.user.bean.AppSecret; import cn.vlabs.umt.services.user.bean.LdapBean; import cn.vlabs.umt.services.user.bean.LoginNameInfo; import cn.vlabs.umt.services.user.bean.User; import cn.vlabs.umt.services.user.bean.UsernamePasswordCredential; import cn.vlabs.umt.services.user.service.IAppSecretService; import cn.vlabs.umt.services.user.service.ILdapService; import cn.vlabs.umt.services.user.service.IUserLoginNameService; import cn.vlabs.umt.ui.BaseController; import com.octo.captcha.module.servlet.image.SimpleImageCaptchaServlet; import com.octo.captcha.service.CaptchaServiceException; @Controller @RequestMapping("/user/enableWifi") public class EnableWIFIController extends BaseController { @Autowired private IAppSecretService appSecretService; @Autowired private ILdapService ldapService; @Autowired private LoginService loginService; @Autowired private UserService userService; @Autowired private IUserLoginNameService loginNameService; private static final String WIFI_INPUT_COUNT="wifi.counter"; private static Logger log = Logger.getLogger(EnableWIFIController.class); private int getCurrentCount(HttpServletRequest request){ HttpSession session = request.getSession(); Integer count =(Integer)session.getAttribute(WIFI_INPUT_COUNT); if (count==null){ count=1; }else{ count=count+1; } session.setAttribute(WIFI_INPUT_COUNT, count); return count; } private boolean isValidateCodeRight(HttpServletRequest request, int count){ //检查验证码 if (count>3) { String validCode = request.getParameter("validateCode"); try{ return SimpleImageCaptchaServlet.validateResponse(request,validCode ); }catch(CaptchaServiceException e){ } } return true; } @RequestMapping(params="act=save") public String save(HttpServletRequest request, HttpServletResponse repsonse){ try{ User user = SessionUtils.getUser(request); String username=user.getCstnetId(); String password=request.getParameter("password"); //input validate check if (StringUtils.isEmpty(username)||StringUtils.isEmpty(password)){ return showPage(request); } request.setAttribute("username", username); //check validate code int count=this.getCurrentCount(request); if (count>=3){ request.setAttribute("showValidate", "true"); } if (!isValidateCodeRight(request,count)){ request.setAttribute("validateCodeError", "true"); return showPage(request); } //check password if (!loginService.passwordRight(new UsernamePasswordCredential(username, password))){ request.setAttribute("passworderror", "wifi.password.error"); return showPage(request); } LdapBean ldapBean = ldapService.findAvailableWifi(username); if (ldapBean==null || !ldapBean.inScope(username)){ request.setAttribute("userDomain",EmailUtil.extractDomain(username)); return "wifi/notopen"; }; appSecretService.updateWifiPasswordOrInsertIfNotExist(ldapBean, user, password); request.setAttribute("loginname", user.getCstnetId()); request.setAttribute("clientName", ldapBean.getClientName()); //Reset the counter HttpSession session = request.getSession(); session.removeAttribute(WIFI_INPUT_COUNT); session.removeAttribute("showValidate"); if(StringUtils.equals(LdapBean.PRIV_NEED_APPLY, ldapBean.getPriv())){ return "wifi/waitApply"; } return "wifi/message"; }catch (Throwable e){ log.error("Fail to enable wifi", e); throw e; } } @RequestMapping(params="act=canBeOpen") @ResponseBody public boolean canBeOpen(@RequestParam("clientId")String clientId, @RequestParam("username")String userName){ User user = userService.getUserByLoginName(userName); if (user==null){ return true; } AppSecret secret = appSecretService.findAppSecretByUidAndAppId(clientId, user.getId()); return secret==null; } @RequestMapping(params = "act=isNameAvailable") public void isNameAvailable(HttpServletRequest request, HttpServletResponse response) throws IOException { String newName = CommonUtils.trim(request.getParameter("ldapName")); String username = CommonUtils.trim(request.getParameter("username")); if (username!=null){ User user = userService.getUserByLoginName(username); if (user!=null){ LoginNameInfo loginNameInfo = loginNameService.getLdapLoginName(user.getId()); if (loginNameInfo!=null && loginNameInfo.getLoginName().equals(newName)){ response.getWriter().print(true); return; }; } } boolean flag = loginNameService.isUsed(newName); response.getWriter().print(!flag); } @RequestMapping public String showPage(HttpServletRequest request) { User user = SessionUtils.getUser(request); String domain = EmailUtil.extractDomain(user.getCstnetId()); request.setAttribute("userDomain", domain); LdapBean app = ldapService.findAvailableWifi(user.getCstnetId()); if (app == null) { return "wifi/notopen"; } request.setAttribute("app", app); LoginNameInfo loginInfo = loginNameService.getLdapLoginName(user.getId()); request.setAttribute("user", user); request.setAttribute("loginNameInfo", loginInfo); if (app.inScope(user.getCstnetId())){ AppSecret secret = appSecretService.findAppSecretByUidAndAppId(Integer.toString(app.getId()), user.getId()); if (secret!=null){ return "wifi/alreadyopen"; } return "wifi/loggedin"; }else{ return "wifi/notopen"; } } }