/*
* 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.services.account;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.BeanFactory;
import cn.vlabs.duckling.api.umt.rmi.userv7.SearchField;
import cn.vlabs.umt.common.util.CommonUtils;
import cn.vlabs.umt.common.util.Config;
import cn.vlabs.umt.services.user.bean.CoreMailUserInfo;
import cn.vlabs.umt.services.user.bean.User;
import cn.vlabs.umt.ui.UMTContext;
import cn.vlabs.umt.validate.validator.ValidatorFactory;
/**
* @author lvly
* @since 2013-10-14
*/
public abstract class ICoreMailClient {
public static final String USEABLE_BEAN_ID="useableCoreMailClient";
public static final String UN_USEABLE_BEAN_ID="unuseableCoreMailClient";
public static boolean useable;
public static Config config;
public static final List<String> BLACK_LIST=new ArrayList<String>();
static{
BLACK_LIST.add("@sina.com");
BLACK_LIST.add("@163.com");
BLACK_LIST.add("@qq.com");
BLACK_LIST.add("@126.com");
BLACK_LIST.add("@vip.sina.com");
BLACK_LIST.add("@sina.cn");
BLACK_LIST.add("@hotmail.com");
BLACK_LIST.add("@gmail.com");
BLACK_LIST.add("@sohu.com");
BLACK_LIST.add("@yahoo.cn");
BLACK_LIST.add("@139.com");
BLACK_LIST.add("@wo.com.cn");
BLACK_LIST.add("@189.cn");
BLACK_LIST.add("@21cn.com");
BLACK_LIST.add("@umt.root");
BLACK_LIST.add("@root.umt");
}
public static boolean isBlack(String email){
if(CommonUtils.isNull(email)){
return true;
}
if(!ValidatorFactory.getEmailRegixValidator().validate(email)){
return true;
}
for(String domain:BLACK_LIST){
if(email.endsWith(domain)){
return true;
}
}
return false;
}
public static void init(BeanFactory factory){
if(config==null){
config=(Config)factory.getBean("Config");
useable=config.getBooleanProp("umt.coremail.enable", false);
}
}
public static ICoreMailClient getInstance(){
BeanFactory factory=UMTContext.getFactory();
init(factory);
if(useable){
return (ICoreMailClient)factory.getBean(USEABLE_BEAN_ID);
}else{
return (ICoreMailClient)factory.getBean(UN_USEABLE_BEAN_ID);
}
}
/**
* 不理会用户传过来的@domain信息直接用配置文件配置的信息
* @param userName 用户输入的账户信息,比如username@shi.com 或者 username
* */
public String formatEmail(String userName){
if(CommonUtils.isNull(userName)){
return "";
}
if(userName.contains("@")){
return userName;
}else{
String domain="@"+config.getStringProp("umt.coremail.api.email.domain", "escience.cn");
return getUserName(userName)+domain;
}
}
public String getUserName(String email){
if(email.contains("@")){
return email.substring(0,email.indexOf("@"));
}
return email;
}
/**
* 邮件系统验证用户是否存在
* @param usreName 用户邮箱
* */
public abstract boolean isUserExt(String userName) ;
/**
* 更改用户的对应密码,注意,请先用authenticate验证,就密码是否相同
*
* @param userName
* 用户账户
* @param newPassword
* ,明文密码
* @return 是否更改成功
* */
public abstract boolean changePassword(String userName, String newPassword) ;
/**
* 验证邮箱用户名密码,是否正确
*
* @param userName
* 用户名
* @param passWord
* 用户密码
* */
public abstract CoreMailAuthenticateResult authenticate(String userName, String passWord);
/**
* 获得用户信息,请调用这个方法前,用authenticate(userName,passWord)验证改用户是否有效
*
* @param userName
* @return 用户信息
* */
public abstract CoreMailUserInfo getCoreMailUserInfo(String userName);
/**
* 获取次关键字有多少结果
* @param keyword
* */
public abstract int getSize(String domain,String keyword,SearchField field);
/**
* 根据关键字搜索
* @param keyword 关键字
* @param field 搜索字段
* @param offset 偏移
* @param size -1为无限制
* @return
*/
public abstract List<User> searchByKeyword(String keyword,String domain,SearchField field,int offset,int size);
/**
* 检查CoreMail域名是否已存在
* */
public abstract boolean domainExist(String domainName);
/**
* 创建用户
* @param username
* @param password
*/
public abstract boolean createUser(String username,String trueName, String password);
}