baseapi.jsp 13.9 KB
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<%@page import="java.io.*"%>
<%@page import="java.util.*"%>
<%@page import="java.util.regex.*"%>
<%@page import="java.net.*"%>
<%@page import="weaver.general.*"%>
<%@page import="weaver.social.service.SocialOpenfireUtil"%>
<%@page import="weaver.mobile.rong.*"%>
<%@page import="weaver.social.po.SocialClientProp"%>
<%@page import="org.dom4j.io.SAXReader"%>
<%@ page import="org.apache.commons.logging.Log"%>
<%@ page import="org.apache.commons.logging.LogFactory"%>
<%@page import="net.sf.json.JSONObject"%>
<%@ page import="weaver.social.SocialUtil"%>
<%
	 user =   HrmUserVarify.getUser (request , response);
	 resultListing = resolveXml();
%>
<%!
	User user;
	Log logger= LogFactory.getLog(this.getClass());

	String getClientProp(String propkey) {
		return SocialClientProp.getPropValue(propkey);
	}
	
	class ResultBean {
		private String errorMsg;
		private String resolution;
		public ResultBean(String errorMsg, String resolution) {
			this.errorMsg = errorMsg;
			this.resolution = resolution;
		}
		public String getErrorMsg() {
			return this.errorMsg;
		}
		public String getResolution() {
			return this.resolution;
		}
	}

	public Map<Integer, ResultBean> resultListing ;

	Map<Integer, ResultBean> resolveXml() {

		int language = user.getLanguage();
		
		String lng = "zh-CN";
		if(language == 8){
			lng = "en-US";
		}else if(language == 9){
			lng = "zh-TW";
		}
		Map<Integer, ResultBean> map = new HashMap<Integer, ResultBean>();
		String xmlPath = GCONST.getRootPath()+"social" + 
			File.separator + "detect" +
			File.separator + "interface" + 
			File.separator + "resolution-" + lng + ".xml";
	    File xmlFile = new File(xmlPath);
	    
	    if(!xmlFile.exists()){
	        return map;
	    }
	    SAXReader saxReader = SocialUtil.getSAXReader();
		try {
			FileInputStream in = new FileInputStream(xmlFile);
			Reader reader = new InputStreamReader(in,"utf-8");
			org.dom4j.Document document = saxReader.read(reader);  
	        org.dom4j.Element root =  document.getRootElement();
	        document.setDocType(document.getDocType());
	        List nodes = null;
	        nodes = root.elements("result");
	        for (Iterator it = nodes.iterator(); it.hasNext();) { 
	            org.dom4j.Element elm = (org.dom4j.Element) it.next();
	            String errorMsg = "", resolution = "";
            	errorMsg = elm.elementTextTrim("errorMsg");
            	resolution = elm.elementTextTrim("resolution");
            	Integer errorCode = Util.getIntValue(elm.attribute("errorCode").getValue());
            	map.put(errorCode, new ResultBean(errorMsg, resolution));
	        }
		}catch(Exception e) {
			logger.error("social-detect-resolveXml 报错: " + e.getMessage());
		}
		return map;
	}
	
	String translate(String content, JSONObject dict) {
		Pattern pattern = Pattern.compile("(#\\{[a-zA-Z0-9]*\\})");
        Matcher matcher = pattern.matcher(content);
        while (matcher.find()) {
        	String keyWrap = matcher.group();
        	String key = keyWrap.substring(2, keyWrap.length() - 1);
            if(dict.containsKey(key)) {
            	content = content.replace(keyWrap, dict.getString(key));
            } 
        }
        System.out.println(content);
		return content;
	}

	boolean isConfigured(String filterName) {
	    String xmlPath = GCONST.getRootPath()+"WEB-INF" + File.separator + "web.xml";
	    File xmlFile = new File(xmlPath);
	    
	    if(!xmlFile.exists()){
	        return false;
	    }
	    SAXReader reader = SocialUtil.getSAXReader();
	    try{
			org.dom4j.Document document = reader.read(xmlFile);
	        org.dom4j.Element root =  document.getRootElement();
	        document.setDocType(document.getDocType());
	        List nodes = null;
	        if(filterName.equals("SocialIMServlet")){
	            nodes = root.elements("servlet");
	        }else{
	            nodes = root.elements("filter");
	        }
	        
	        for (Iterator it = nodes.iterator(); it.hasNext();) { 
	            org.dom4j.Element elm = (org.dom4j.Element) it.next();
	            String name ="";
	            if(filterName.equals("SocialIMServlet")){
	                name = elm.elementTextTrim("servlet-name");
	            }else{
	                name = elm.elementTextTrim("filter-name");
	            }
	            if(name.equals(filterName)){
	                return true;
	            }
	        }
	    }catch(Exception e) {
	    	logger.error("social-detect-isFilterConfigured 报错: " + e.getMessage());
	        return false;
	    }
	    
	    return false;
	}

	JSONObject checkSocialFilter() {
		SAXReader reader = SocialUtil.getSAXReader();
        String file=GCONST.getRootPath()+"WEB-INF" + File.separator + "web.xml";
        File xmlfile = new File(file);
        JSONObject result = new JSONObject();
        boolean flag = false;
        boolean flag1 = false;
        boolean flag2 = false;
        try {  
            // 通过reader对象的read方法加载books.xml文件,获取document对象  
            org.dom4j.Document document = reader.read(xmlfile);  
            org.dom4j.Element root =  document.getRootElement();
            
            List nodes = root.elements("filter");
            for (Iterator it = nodes.iterator(); it.hasNext();) {
                org.dom4j.Element elm = (org.dom4j.Element) it.next(); 
                String name = elm.elementTextTrim("filter-name");
                String text = elm.elementTextTrim("filter-class");
                if("SocialIMFilter".equals(name)&&"weaver.social.filter.SocialIMFilter".equals(text)){
                    flag = true;
                    break;
                }                                                    
            }
            List nodess = root.elements("filter-mapping");
            int count = 0 ;
            for (Iterator it = nodess.iterator(); it.hasNext();) { 
                org.dom4j.Element elm = (org.dom4j.Element) it.next(); 
                String name = elm.elementTextTrim("filter-name");
                String text = elm.elementTextTrim("url-pattern");
                if("SocialIMFilter".equals(name)&&"/social/im/*.jsp".equals(text)){
                    flag1 = true;
                    count ++ ;
                }
                if("SocialIMFilter".equals(name)&&"/weaver/weaver.file.FileDownload".equals(text)){
                    flag2 = true;
                    count ++ ;
                }                                        
            }
            result.put("exist", flag);
            result.put("correct", flag1&&flag2);
            result.put("duplicate", count > 2);
            result.put("error", "");
            return result;
        } catch (Exception e) {  
        	logger.error("social-detect-checksocialfilter 报错: " + e.getMessage());
	        result.put("error", "检测报错");
	        return result;
        }
	}
	// 检查过滤器
	JSONObject checkFilter() {
		JSONObject result = new JSONObject();
	    String xmlPath = GCONST.getRootPath()+"WEB-INF" + File.separator + "web.xml";
	    File xmlFile = new File(xmlPath);
	    //Boolean isSocialIMFilter = SocialIMCheckService.isFilterConfigured("SocialIMFilter");
	    //Boolean isWSessionClusterFilter = SocialIMCheckService.isFilterConfigured("WSessionClusterFilter");
	    //Boolean isSecurityFilter = SocialIMCheckService.isFilterConfigured("SecurityFilter");
	    result.put("isSocialIMFilter", "0");
	    result.put("isWSessionClusterFilter", "0");
	    result.put("isSecurityFilter", "0");
	    result.put("error", "");
	    if(!xmlFile.exists()){
	        return result;
	    }
	    boolean flagSocialIMFilter = false;
	    boolean flagWSessionClusterFilter = false;
	    boolean flagSecurityFilter = false;
	    SAXReader reader = SocialUtil.getSAXReader();
	    int numSocialIMFilter = 0;
	    int numWSessionClusterFilter = 0;
	    int numSecurityFilter = 0;
	    try{
	        org.dom4j.Document document = reader.read(xmlFile);  
	        org.dom4j.Element root =  document.getRootElement();
	        List nodes = null;
	        nodes = root.elements("filter");
	        int i = 0;
	        for (Iterator it = nodes.iterator(); it.hasNext();) {
	            i++;
	            org.dom4j.Element elm = (org.dom4j.Element) it.next();
	            String name ="";
	            name = elm.elementTextTrim("filter-name");
	            //log.writeLog("===================="+name);
	            if(name.equals("SocialIMFilter")){
	                result.put("isSocialIMFilter", i);
	                numSocialIMFilter = i;
	                flagSocialIMFilter = true;
	            }
	            if(name.equals("WSessionClusterFilter")){
	                result.put("isWSessionClusterFilter", i);
	                numWSessionClusterFilter = i;
	                flagWSessionClusterFilter = true;
	            }
	            if(name.equals("SecurityFilter")){
	                result.put("isSecurityFilter", i);
	                numSecurityFilter = i;
	                flagSecurityFilter = true;
	            }
	            if(flagSocialIMFilter&flagWSessionClusterFilter&flagSecurityFilter){
	                break;
	            }
	        }
	        if(flagSocialIMFilter&flagWSessionClusterFilter&flagSecurityFilter){
	            if(numSocialIMFilter>numWSessionClusterFilter){
	                if(numSocialIMFilter>numSecurityFilter){
	                    numSocialIMFilter = 1;
	                    if(numWSessionClusterFilter>numSecurityFilter){
	                        numWSessionClusterFilter = 2;
	                        numSecurityFilter = 3;
	                    }else{
	                        numWSessionClusterFilter = 3;
	                        numSecurityFilter = 2;
	                    }
	                }else{
	                    numSecurityFilter = 1;
	                    numWSessionClusterFilter = 3;
	                    numSocialIMFilter = 2;
	                    
	                }
	            }else{
	                if(numSocialIMFilter>numSecurityFilter){
	                    numSecurityFilter = 1;
	                    numWSessionClusterFilter = 3;
	                    numSocialIMFilter = 2;
	                }else{
	                    numSocialIMFilter = 3;
	                    if(numWSessionClusterFilter>numSecurityFilter){
	                        numWSessionClusterFilter = 1;
	                        numSecurityFilter = 2;
	                    }else{
	                        numWSessionClusterFilter = 2;
	                        numSecurityFilter = 1;
	                    }
	                }
	            }
	            result.put("isSocialIMFilter", numSocialIMFilter);
	            result.put("isWSessionClusterFilter", numWSessionClusterFilter);
	            result.put("isSecurityFilter", numSecurityFilter);
	        }else{
	            if(flagSocialIMFilter&flagSecurityFilter){
	                if(numSocialIMFilter>numSecurityFilter){
	                    result.put("isSocialIMFilter", "1");
	                    result.put("isSecurityFilter", "2");
	                }else{
	                    result.put("isSocialIMFilter", "2");
	                    result.put("isSecurityFilter", "1");
	                }
	            }else if(flagSocialIMFilter&flagWSessionClusterFilter){
	                if(numSocialIMFilter>numWSessionClusterFilter){
	                    result.put("isSocialIMFilter", "1");
	                    result.put("isWSessionClusterFilter", "2");
	                }else{
	                    result.put("isSocialIMFilter", "2");
	                    result.put("isWSessionClusterFilter", "1");
	                }
	            }else if(flagWSessionClusterFilter&flagSecurityFilter){
	                if(numWSessionClusterFilter>numSecurityFilter){
	                    result.put("isSecurityFilter", "2");
	                    result.put("isWSessionClusterFilter", "1");
	                }else{
	                    result.put("isSecurityFilter", "1");
	                    result.put("isWSessionClusterFilter", "2");
	                }
	            }else if(flagSocialIMFilter){
	                result.put("isSocialIMFilter", "1");
	            }else if(flagWSessionClusterFilter){
	                result.put("isWSessionClusterFilter", "1");
	            }else if(flagSecurityFilter){
	                result.put("isSecurityFilter", "1");
	            }
	        }
	    }catch(Exception e) {
	    	logger.error("social-detect-checkfilter 报错: " + e.getMessage());
	        result.put("error", "检测报错");
	        return result;
	    }
	    return result;
	}
	// 检查端口
	boolean checkPort(String hostname, int port) {
		boolean flag = false;
		Socket client = null;
	    try{
	      client = new Socket();
	      client.connect(new InetSocketAddress(hostname, Integer.valueOf(port)), 5000);
	      client.close();
	      flag = true;
	    }catch(Exception e){
	      logger.error("social-detect-checkPort 报错: " + e.getMessage());
	      flag = false;
	    }
	    return flag;
	}
	// 检查获取token
	String getToken(String host, String userid, String username, String messageUrl, boolean reFreshToken) {
	    String udid = RongService.getRongConfig().getAppUDIDNew().toLowerCase();
	    String token = SocialOpenfireUtil.getInstanse().getToken(userid + "|" + udid, username, messageUrl,reFreshToken,host);
	    return token;
	}
	// 解析url
	String[] parseHost(String fullUrl) {
		String regex="^(.*)//(.*?):(.*)";
		String[] hostAry = new String[3];
		Pattern p = Pattern.compile(regex);
		Matcher m = p.matcher(fullUrl);
		if(m.find()){
			String mProto = m.group(1);
			String mHost = m.group(2);
			String mPort = m.group(3);
			hostAry[0] = mProto;
			hostAry[1] = mHost;
			hostAry[2] = mPort;
		}
		return hostAry;
	}
	
	// 获取解决方案和错误提示
	JSONObject getResult(JSONObject res, int errorCode, JSONObject dict) {
		ResultBean rb = resultListing.get(errorCode);
		if (res == null) {
			res = new JSONObject();
		}
		String errorMsg = "检测通过";
		String resolution = "";
		if (rb != null) {
			errorMsg = translate(rb.errorMsg, dict);
			resolution = translate(rb.resolution, dict);
		}
		res.put("result", errorMsg);
		res.put("resolution", resolution);
		return res;
	}
%>