/*
* 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.admin;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
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.services.session.SessionUtils;
import cn.vlabs.umt.services.user.bean.OauthClientBean;
import cn.vlabs.umt.services.user.service.IOauthClientService;
import cn.vlabs.umt.services.user.utils.ServiceFactory;
import cn.vlabs.umt.ui.UMTContext;
@Controller
@RequestMapping("/admin/addClient")
public class AddClientController {
@Autowired
private IOauthClientService oauthClientServer;
@RequestMapping
public String service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setAttribute("clients", getAllClient());
return "/admin/oauthaddcliend";
}
@RequestMapping(params="act=removeLogo")
public void removeLogo(HttpServletRequest request, HttpServletResponse response) {
int beanId=Integer.parseInt(request.getParameter("beanId"));
OauthClientBean ocb=new OauthClientBean();
ocb.setId(beanId);
String target=request.getParameter("target");
switch(target){
case "100p":{
oauthClientServer.removeLogo(ocb, true, false, false, false);
break;
}
case "64p":{
oauthClientServer.removeLogo(ocb, false,true, false, false);
break;
}
case "32p":{
oauthClientServer.removeLogo(ocb, false,false, true, false);
break;
}
case "16p":{
oauthClientServer.removeLogo(ocb, false,false, false, true);
break;
}
}
}
@RequestMapping(params="act=clientIdUsed")
public void clientIdUsed(HttpServletRequest request, HttpServletResponse response) throws NumberFormatException, IOException{
response.setCharacterEncoding("utf-8");
String clientId=request.getParameter("client_id");
String type=request.getParameter("type");
boolean flag=false;
if("update".equals(type)){
flag=true;
}else{
flag=oauthClientServer.findByClientId(clientId)==null;
}
response.getWriter().print(flag);
}
@RequestMapping(params="act=getClientInfo")
public void getClientInfo(HttpServletRequest req, HttpServletResponse resp){
resp.setCharacterEncoding("utf-8");
String clientId = req.getParameter("client_id");
JSONObject result = new JSONObject();
if(StringUtils.isEmpty(clientId)){
result.put("result", false);
result.put("message", "client_id不能为空");
writeJSONObject(resp, result);
return;
}
OauthClientBean b=oauthClientServer.findByClientId(clientId);
if(b==null){
result.put("result", false);
result.put("message", "client_id "+clientId+" 不已存在");
writeJSONObject(resp, result);
return;
}else{
result.put("result", true);
result.put("client_id",b.getClientId());
result.put("client_secret",b.getClientSecret());
result.put("redirect_URI",b.getRedirectURI());
result.put("client_name",b.getClientName());
result.put("third_party",b.getThirdParty());
result.put("client_status", b.getStatus());
result.put("client_website",b.getClientWebsite());
result.put("pwd_type", b.getPwdType());
result.put("app_type",b.getAppType());
result.put("scope", b.getScope());
result.put("needOrgInfo",b.getNeedOrgInfo());
result.put("enableAppPwd", b.getEnableAppPwd());
result.put("compulsionStrongPwd", b.isCompulsionStrongPwd());
writeJSONObject(resp, result);
}
}
@RequestMapping(params="act=refresh")
public String refreshClient(HttpServletRequest req) {
String id = req.getParameter("id");
OauthClientBean bean =oauthClientServer.findById(Integer.valueOf(id));
if(bean!=null){
oauthClientServer.deleteFromCache(bean);
}
req.setAttribute("clients", getAllClient());
return "/admin/oauthaddcliend";
}
@RequestMapping(params="act=delete")
public String deleteClient(HttpServletRequest req, HttpServletResponse resp) {
String id = req.getParameter("id");
oauthClientServer.delete(Integer.parseInt(id));
req.setAttribute("clients", getAllClient());
return "/admin/oauthaddcliend";
}
@RequestMapping(params="act=add")
public void addClient(HttpServletRequest req, HttpServletResponse resp) {
resp.setCharacterEncoding("utf-8");
JSONObject result = new JSONObject();
String clientId = trim(req.getParameter("client_id"));
String cleintSecret = trim(req.getParameter("client_secret"));
String redirectURI = trim(req.getParameter("redirect_URI"));
String clientName = trim(req.getParameter("client_name"));
String thirdParty = trim(req.getParameter("third_party"));
String clientWebsite = trim(req.getParameter("client_website"));
String appType=trim(req.getParameter("app_type"));
String pwdType=trim(req.getParameter("pwd_type"));
String[] scope=req.getParameterValues("scope");
String needOrgInfo=req.getParameter("need_org_info");
String enableAppPassword=req.getParameter("enableAppPwd");
String compulsionStrongPwd=req.getParameter("compulsionStrongPwd");
String scopeStr=null;
if(!CommonUtils.isNull(scope)){
scopeStr=Arrays.toString(scope);
scopeStr=scopeStr.substring(1,scopeStr.length()-1);
}
StringBuilder sb = null;
if(StringUtils.isNotEmpty(cleintSecret)&&StringUtils.isNotEmpty(clientId)&&StringUtils.isNotEmpty(redirectURI)){
OauthClientBean b=oauthClientServer.findByClientId(clientId);
if(b!=null){
result.put("result", false);
result.put("message", "client_id "+clientId+" 已存在");
writeJSONObject(resp, result);
return;
}else{
OauthClientBean bean = new OauthClientBean();
bean.setClientId(clientId);
bean.setClientSecret(cleintSecret);
bean.setRedirectURI(redirectURI);
bean.setScope(scopeStr);
bean.setClientName(clientName);
bean.setStatus(OauthClientBean.STATUS_ACCEPT);
bean.setThirdParty(thirdParty);
bean.setClientWebsite(clientWebsite);
bean.setUid(SessionUtils.getUserId(req));
bean.setAppType(appType);
bean.setPwdType(pwdType);
bean.setEnableAppPwd(enableAppPassword);
if(needOrgInfo!=null){
bean.setNeedOrgInfo(Integer.parseInt(needOrgInfo));
}else{
bean.setNeedOrgInfo(0);
}
if(!CommonUtils.isNull(compulsionStrongPwd)){
bean.setCompulsionStrongPwd(Boolean.parseBoolean(compulsionStrongPwd));
}
int i=oauthClientServer.save(bean,true);
if(i<0){
result.put("result", false);
result.put("message", "保存失败");
writeJSONObject(resp, result);
}else{
result.put("result", true);
result.put("message", "保存失败");
writeJSONObject(resp, result);
return;
}
}
}
if(sb==null){
sb = new StringBuilder();
}
if(StringUtils.isEmpty(clientId)){
sb.append("client_id不能为空 ");
}
if(StringUtils.isEmpty(cleintSecret)){
sb.append("cleint_secret不能为空 ");
}
if(StringUtils.isEmpty(redirectURI)){
sb.append("redirect uri 不能为空 ");
}
if(StringUtils.isEmpty(clientName)){
sb.append(" client_name 不能为空");
}
if(sb!=null&&sb.length()>0){
result.put("result", false);
result.put("message", sb.toString());
writeJSONObject(resp, result);
return;
}
}
private String trim(String s){
if(StringUtils.isEmpty(s)){
return s;
}
return s.trim();
}
@RequestMapping(params="act=update")
public void updateClient(HttpServletRequest req, HttpServletResponse resp){
resp.setCharacterEncoding("utf-8");
JSONObject result = new JSONObject();
String clientId = trim(req.getParameter("client_id"));
String cleintSecret = trim(req.getParameter("client_secret"));
String redirectURI = trim(req.getParameter("redirect_URI"));
String clientName = trim(req.getParameter("client_name"));
String thirdParty = trim(req.getParameter("third_party"));
String clientWebsite = trim(req.getParameter("client_website"));
String clientStatus=trim(req.getParameter("client_status"));
String appType=trim(req.getParameter("app_type"));
String pwdType=trim(req.getParameter("pwd_type"));
String[] scope=req.getParameterValues("scope");
String needOrgInfo=req.getParameter("need_org_info");
String enableAppPwd=req.getParameter("enableAppPwd");
String compulsionStrongPwd=req.getParameter("compulsionStrongPwd");
String scopeStr=null;
if(!CommonUtils.isNull(scope)){
if(!CommonUtils.isNull(scope)){
scopeStr=Arrays.toString(scope);
scopeStr=scopeStr.substring(1,scopeStr.length()-1);
}
}
StringBuilder sb = null;
if(StringUtils.isNotEmpty(cleintSecret)&&StringUtils.isNotEmpty(clientId)&&StringUtils.isNotEmpty(redirectURI)){
OauthClientBean bean=oauthClientServer.findByClientId(clientId);
if(bean==null){
result.put("result", false);
result.put("message", "client_id "+clientId+" 不已存在,不能进行更新");
writeJSONObject(resp, result);
return;
}else{
String beforeStatus=bean.getStatus();
bean.setClientId(clientId);
bean.setClientSecret(cleintSecret);
bean.setRedirectURI(redirectURI);
bean.setClientName(clientName);
bean.setStatus(clientStatus);
bean.setThirdParty(thirdParty);
bean.setClientWebsite(clientWebsite);
bean.setAppType(appType);
bean.setPwdType(pwdType);
bean.setScope(scopeStr);
bean.setEnableAppPwd(enableAppPwd);
if(needOrgInfo!=null){
bean.setNeedOrgInfo(Integer.parseInt(needOrgInfo));
}else{
bean.setNeedOrgInfo(0);
}
if(!CommonUtils.isNull(compulsionStrongPwd)){
bean.setCompulsionStrongPwd(Boolean.parseBoolean(compulsionStrongPwd));
}
oauthClientServer.update(bean);
if(!clientStatus.equals(beforeStatus)){
UMTContext context=new UMTContext(req);
oauthClientServer.sendAdminToDevelop(context.getLocale(), bean, ServiceFactory.getUserService(req).getUserByUid(bean.getUid()));
}
result.put("result", true);
result.put("message", "保存成功");
writeJSONObject(resp, result);
return;
}
}
if(sb==null){
sb = new StringBuilder();
}
if(StringUtils.isEmpty(clientId)){
sb.append("client_id不能为空 ");
}
if(StringUtils.isEmpty(cleintSecret)){
sb.append("client_secret不能为空 ");
}
if(StringUtils.isEmpty(redirectURI)){
sb.append("redirect uri 不能为空 ");
}
if(StringUtils.isEmpty(clientName)){
sb.append(" client_name 不能为空");
}
if(sb!=null&&sb.length()>0){
result.put("result", false);
result.put("message", sb.toString());
writeJSONObject(resp, result);
return;
}
}
private List<OauthClientBean> getAllClient(){
return oauthClientServer.getAll();
}
private static void writeJSONObject(HttpServletResponse response,Object object) {
PrintWriter writer = null;
try {
//为了兼容IE系浏览器,特意设置成text/html格式
response.setContentType("text/html");
writer = response.getWriter();
writer.write(object.toString());
} catch (IOException e) {
}finally {
if (writer!=null){
writer.flush();
writer.close();
}
}
}
}