pioneer
2 years ago
commit
275f21aa50
13 changed files with 892 additions and 0 deletions
@ -0,0 +1,6 @@
|
||||
# open-JSD-10126 |
||||
|
||||
JSD-10126 FR调用OA的单点认证接口,完成认证登录\ |
||||
免责说明:该源码为第三方爱好者提供,不保证源码和方案的可靠性,也不提供任何形式的源码教学指导和协助!\ |
||||
仅作为开发者学习参考使用!禁止用于任何商业用途!\ |
||||
为保护开发者隐私,开发者信息已隐去!若原开发者希望公开自己的信息,可联系【pioneer】处理。 |
Binary file not shown.
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?> |
||||
<plugin> |
||||
<id>com.eco.plugin.xx.mbe</id> |
||||
<name><![CDATA[慕贝尔汽车OA插件]]></name> |
||||
<active>yes</active> |
||||
<version>1.0.3</version> |
||||
<env-version>10.0</env-version> |
||||
<jartime>2021-02-10</jartime> |
||||
<vendor>fr.open</vendor> |
||||
<main-package>com.fr.plugin</main-package> |
||||
<!--用来记录这个任务的创建时间--> |
||||
<description><![CDATA[ |
||||
|
||||
]]></description> |
||||
<!--任务ID: 10126--> |
||||
<create-day>2022-5-12 10:46:33</create-day> |
||||
<extra-decision> |
||||
<HttpHandlerProvider class="com.fr.plugin.http.MBEHttpHandler"/> |
||||
<URLAliasProvider class="com.fr.plugin.http.MBEUrlAliasProvider"/> |
||||
<WebResourceProvider class="com.fr.plugin.web.MBEMubea1WebResourceProvider"/> |
||||
</extra-decision> |
||||
<lifecycle-monitor class="com.fr.plugin.MBELifeCycleMonitor"/> |
||||
<function-recorder class="com.fr.plugin.FunctionRecoder"/> |
||||
</plugin> |
@ -0,0 +1,12 @@
|
||||
package com.fr.plugin; |
||||
|
||||
import com.fr.plugin.transform.ExecuteFunctionRecord; |
||||
import com.fr.plugin.transform.FunctionRecorder; |
||||
|
||||
@FunctionRecorder |
||||
public class FunctionRecoder { |
||||
@ExecuteFunctionRecord |
||||
public void exe(){ |
||||
System.out.println("插件功能埋点,虽然不会执行,除非上架应用"); |
||||
} |
||||
} |
@ -0,0 +1,42 @@
|
||||
package com.fr.plugin; |
||||
|
||||
import com.fr.config.*; |
||||
import com.fr.config.holder.Conf; |
||||
import com.fr.config.holder.factory.Holders; |
||||
|
||||
@Visualization(category = "xxOA插件配置") |
||||
public class MBEConfig extends DefaultConfiguration { |
||||
|
||||
private static volatile MBEConfig config = null; |
||||
|
||||
public static MBEConfig getInstance() { |
||||
if (config == null) { |
||||
config = ConfigContext.getConfigInstance(MBEConfig.class); |
||||
} |
||||
return config; |
||||
} |
||||
@Identifier(value = "apiUrl", name = "用户校验身份接口", description = "用户校验身份接口", status = Status.SHOW) |
||||
private Conf<String> apiUrl = Holders.simple("http://xxxxxxxx/api/mubea/check/checkuser"); |
||||
@Identifier(value = "ukey", name = "ukey", description = "描述", status = Status.SHOW) |
||||
private Conf<String> ukey = Holders.simple(""); |
||||
public String getApiUrl() { |
||||
return apiUrl.get(); |
||||
} |
||||
public void setApiUrl(String apiUrl) { |
||||
this.apiUrl.set(apiUrl); |
||||
} |
||||
public String getUkey() { |
||||
return ukey.get(); |
||||
} |
||||
public void setUkey(String ukey) { |
||||
this.ukey.set(ukey); |
||||
} |
||||
@Override |
||||
public Object clone() throws CloneNotSupportedException { |
||||
MBEConfig cloned = (MBEConfig) super.clone(); |
||||
cloned.apiUrl = (Conf<String>) this.apiUrl.clone(); |
||||
cloned.ukey = (Conf<String>) this.ukey.clone(); |
||||
return cloned; |
||||
} |
||||
|
||||
} |
@ -0,0 +1,18 @@
|
||||
package com.fr.plugin; |
||||
|
||||
import com.fr.plugin.context.PluginContext; |
||||
import com.fr.plugin.observer.inner.AbstractPluginLifecycleMonitor; |
||||
import com.fr.stable.fun.Authorize; |
||||
|
||||
@Authorize |
||||
public class MBELifeCycleMonitor extends AbstractPluginLifecycleMonitor { |
||||
@Override |
||||
public void afterRun(PluginContext pluginContext) { |
||||
MBEConfig.getInstance(); |
||||
} |
||||
|
||||
@Override |
||||
public void beforeStop(PluginContext pluginContext) { |
||||
|
||||
} |
||||
} |
@ -0,0 +1,16 @@
|
||||
package com.fr.plugin.http; |
||||
|
||||
import com.fr.decision.fun.HttpHandler; |
||||
import com.fr.decision.fun.impl.AbstractHttpHandlerProvider; |
||||
import com.fr.plugin.http.handler.*; |
||||
|
||||
public class MBEHttpHandler extends AbstractHttpHandlerProvider { |
||||
HttpHandler[] actions = new HttpHandler[]{ |
||||
new ALLMbeLogin1Handler(), |
||||
}; |
||||
|
||||
@Override |
||||
public HttpHandler[] registerHandlers() { |
||||
return actions; |
||||
} |
||||
} |
@ -0,0 +1,14 @@
|
||||
package com.fr.plugin.http; |
||||
|
||||
import com.fr.decision.fun.impl.AbstractURLAliasProvider; |
||||
import com.fr.decision.webservice.url.alias.URLAlias; |
||||
import com.fr.decision.webservice.url.alias.URLAliasFactory; |
||||
|
||||
public class MBEUrlAliasProvider extends AbstractURLAliasProvider { |
||||
@Override |
||||
public URLAlias[] registerAlias() { |
||||
return new URLAlias[]{ |
||||
URLAliasFactory.createPluginAlias("/mbeLogin", "/mbeLogin", true), |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,286 @@
|
||||
package com.fr.plugin.http.handler; |
||||
|
||||
import com.fanruan.api.log.LogKit; |
||||
import com.fanruan.api.net.http.HttpKit; |
||||
import com.fr.base.ServerConfig; |
||||
import com.fr.base.TemplateUtils; |
||||
import com.fr.config.EmailServerConfig; |
||||
import com.fr.data.NetworkHelper; |
||||
import com.fr.decision.authority.data.User; |
||||
import com.fr.decision.config.FSConfig; |
||||
import com.fr.decision.config.LoginVerificationConfig; |
||||
import com.fr.decision.config.mobile.MobileConfig; |
||||
import com.fr.decision.fun.impl.BaseHttpHandler; |
||||
import com.fr.decision.mobile.terminal.TerminalHandler; |
||||
import com.fr.decision.privilege.TransmissionTool; |
||||
import com.fr.decision.webservice.bean.authentication.LoginClientBean; |
||||
import com.fr.decision.webservice.bean.authentication.LoginRequestInfoBean; |
||||
import com.fr.decision.webservice.bean.authentication.LoginResponseInfoBean; |
||||
import com.fr.decision.webservice.bean.authentication.OriginUrlResponseBean; |
||||
import com.fr.decision.webservice.exception.captcha.UnverifiedCaptchaException; |
||||
import com.fr.decision.webservice.exception.general.SpecialCharProhibitException; |
||||
import com.fr.decision.webservice.exception.login.LoginInfoSignErrorException; |
||||
import com.fr.decision.webservice.exception.login.UserLoginException; |
||||
import com.fr.decision.webservice.utils.ControllerFactory; |
||||
import com.fr.decision.webservice.utils.DecisionStatusService; |
||||
import com.fr.decision.webservice.utils.WebServiceUtils; |
||||
import com.fr.decision.webservice.utils.controller.AuthenticController; |
||||
import com.fr.decision.webservice.v10.login.slider.SliderVerificationService; |
||||
import com.fr.decision.webservice.v10.password.strategy.PasswordStrategyService; |
||||
import com.fr.decision.webservice.v10.register.RegisterService; |
||||
import com.fr.decision.webservice.v10.sms.SMSService; |
||||
import com.fr.decision.webservice.v10.user.UserService; |
||||
import com.fr.json.JSONObject; |
||||
import com.fr.log.FineLoggerFactory; |
||||
import com.fr.plugin.MBEConfig; |
||||
import com.fr.security.JwtUtils; |
||||
import com.fr.stable.CodeUtils; |
||||
import com.fr.stable.StringUtils; |
||||
import com.fr.stable.web.Device; |
||||
import com.fr.store.Converter; |
||||
import com.fr.third.fasterxml.jackson.core.JsonGenerationException; |
||||
import com.fr.third.fasterxml.jackson.core.JsonParseException; |
||||
import com.fr.third.fasterxml.jackson.databind.JsonMappingException; |
||||
import com.fr.third.fasterxml.jackson.databind.ObjectMapper; |
||||
import com.fr.third.fasterxml.jackson.databind.type.TypeFactory; |
||||
import com.fr.third.springframework.web.bind.annotation.RequestMethod; |
||||
import com.fr.web.utils.WebUtils; |
||||
|
||||
import javax.servlet.http.Cookie; |
||||
import javax.servlet.http.HttpServletRequest; |
||||
import javax.servlet.http.HttpServletResponse; |
||||
import java.io.BufferedReader; |
||||
import java.io.IOException; |
||||
import java.io.StringWriter; |
||||
import java.io.Writer; |
||||
import java.util.HashMap; |
||||
import java.util.Map; |
||||
|
||||
|
||||
public class ALLMbeLogin1Handler extends BaseHttpHandler { |
||||
@Override |
||||
public RequestMethod getMethod() { |
||||
return null; |
||||
} |
||||
|
||||
@Override |
||||
public String getPath() { |
||||
return "/mbeLogin"; |
||||
} |
||||
|
||||
@Override |
||||
public boolean isPublic() { |
||||
return true; |
||||
} |
||||
|
||||
private static final ObjectMapper objectMapper = new ObjectMapper(); |
||||
|
||||
@Override |
||||
public void handle(HttpServletRequest req, HttpServletResponse res) throws Exception { |
||||
String requestBody = getRequestBody(req); |
||||
try { |
||||
LoginRequestInfoBean infoBean = deserialize(requestBody, LoginRequestInfoBean.class); |
||||
//账号密码验证
|
||||
if (!checkPasswordAndUserName(infoBean)) { |
||||
throw new UserLoginException(); |
||||
} |
||||
LoginResponseInfoBean responseInfoBean = doLogin(req, res, infoBean); |
||||
RespJsonObj respJsonObj = new RespJsonObj(); |
||||
respJsonObj.setData(responseInfoBean); |
||||
res.setContentType("application/json;charset=UTF-8"); |
||||
WebUtils.printAsString(res, serialize(respJsonObj)); |
||||
}catch (Exception e){ |
||||
LogKit.error("login error",e); |
||||
WebUtils.printAsString(res, serialize(e)); |
||||
} |
||||
} |
||||
class RespJsonObj{ |
||||
LoginResponseInfoBean data; |
||||
|
||||
public LoginResponseInfoBean getData() { |
||||
return data; |
||||
} |
||||
|
||||
public void setData(LoginResponseInfoBean data) { |
||||
this.data = data; |
||||
} |
||||
} |
||||
|
||||
private long getTokenTimeOutByValidity(int req) { |
||||
return req == -2 ? 1209600000L : FSConfig.getInstance().getLoginConfig().getLoginTimeout(); |
||||
} |
||||
|
||||
private String generateToken(User req, long var2) { |
||||
return this.generateToken(req.getUserName(), req.getDisplayName(), req.getTenantId(), var2); |
||||
} |
||||
|
||||
private boolean needLoginVerification(Device req) { |
||||
if (req.isMobile()) { |
||||
return LoginVerificationConfig.getInstance().isSmsVerification() && SMSService.getInstance().isSMSAvailable(); |
||||
} else { |
||||
return LoginVerificationConfig.getInstance().isSmsVerification() && SMSService.getInstance().isSMSAvailable() || LoginVerificationConfig.getInstance().isEmailVerification() && EmailServerConfig.getInstance().isEmailConfigValid(); |
||||
} |
||||
} |
||||
|
||||
private void loginInfoSignVerify(Device req, LoginRequestInfoBean var2) throws Exception { |
||||
if (!req.isPC() && MobileConfig.getInstance().getLoginIntegrityCheckConfig().isCheckEnabled()) { |
||||
StringBuilder var3 = new StringBuilder(); |
||||
var3.append("username=").append(var2.getUsername()).append("&password=").append(var2.getPassword()).append("&macAddress=").append(StringUtils.isEmpty(var2.getMacAddress()) ? "" : var2.getMacAddress()).append("&deviceName=").append(StringUtils.isEmpty(var2.getDeviceName()) ? "" : var2.getDeviceName()); |
||||
if (!StringUtils.equals(var3.toString(), TransmissionTool.decrypt(var2.getSign()))) { |
||||
throw new LoginInfoSignErrorException(); |
||||
} |
||||
} |
||||
} |
||||
|
||||
private LoginResponseInfoBean doLogin(HttpServletRequest req, HttpServletResponse res, LoginRequestInfoBean var3) throws Exception { |
||||
Device device = NetworkHelper.getDevice(req); |
||||
this.loginInfoSignVerify(device, var3); |
||||
String var5 = TransmissionTool.decrypt(var3.isEncrypted(), var3.isSupportCustomEncrypt(), var3.getPassword()); |
||||
String var6 = var3.getUsername(); |
||||
if (WebServiceUtils.containSQLChars(var6)) { |
||||
throw new SpecialCharProhibitException(); |
||||
} else { |
||||
String var7 = WebServiceUtils.getIpInfoFromRequest(req); |
||||
SliderVerificationService.getInstance().dealWithSliderVerification(device, var7, var3.getSliderToken()); |
||||
User var8 = UserService.getInstance().getUserByUserName(var6); |
||||
if (var8 == null) { |
||||
SliderVerificationService.getInstance().addErrorCount(var7); |
||||
throw new UserLoginException(); |
||||
} else { |
||||
TerminalHandler var9 = TerminalHandler.getTerminal(req, device); |
||||
AuthenticController var10 = ControllerFactory.getInstance().getAuthenticController(var8.getId()); |
||||
long var11 = this.getTokenTimeOutByValidity(var3.getValidity()); |
||||
String var13 = this.generateToken(var8, var11); |
||||
var10.verifySingleLoginStatus(var8.getUserName(), var9, var13); |
||||
if (var10.passwordChangeable(var8)) { |
||||
PasswordStrategyService.getInstance().checkPasswordNeedUpdate(var8, var13); |
||||
PasswordStrategyService.getInstance().checkPasswordStrength(var5, var6, var13); |
||||
} |
||||
|
||||
if (this.needLoginVerification(device)) { |
||||
throw new UnverifiedCaptchaException(var13); |
||||
} else { |
||||
RegisterService.getInstance().checkLicExpireSoon(var8); |
||||
OriginUrlResponseBean var14 = this.getOriginUrlResponse(var3.getOrigin()); |
||||
LoginClientBean var15 = new LoginClientBean(req, device, var9); |
||||
var15.setUsername(var8.getUserName()); |
||||
var15.setToken(var13); |
||||
var15.setValidity(var3.getValidity()); |
||||
var15.setUserId(var8.getId()); |
||||
var15.setMacAddress(var3.getMacAddress()); |
||||
var10.logoutSingleLoginInvalidUser(var8.getUserName(), var9); |
||||
this.addLoginStatus(var13, var15, var11); |
||||
if (ServerConfig.getInstance().isTokenFromCookie()) { |
||||
this.writeToken2Cookie(res, var13, var3.getValidity()); |
||||
} |
||||
|
||||
return new LoginResponseInfoBean(var13, var14, var8.getUserName(), var3.getValidity()); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
public static String serialize(Object object) { |
||||
Writer write = new StringWriter(); |
||||
try { |
||||
objectMapper.writeValue(write, object); |
||||
} catch (JsonGenerationException e) { |
||||
} catch (JsonMappingException e) { |
||||
} catch (IOException e) { |
||||
} |
||||
return write.toString(); |
||||
} |
||||
public static <T> T deserialize(String json, Class<T> clazz) { |
||||
Object object = null; |
||||
try { |
||||
object = objectMapper.readValue(json, TypeFactory.rawClass(clazz)); |
||||
} catch (JsonParseException e) { |
||||
} catch (JsonMappingException e) { |
||||
} catch (IOException e) { |
||||
} |
||||
return (T) object; |
||||
} |
||||
|
||||
/** |
||||
* 获取请求体 |
||||
* |
||||
* @param req |
||||
* @return |
||||
*/ |
||||
public static String getRequestBody(HttpServletRequest req) { |
||||
StringBuffer sb = new StringBuffer(); |
||||
String line = null; |
||||
try { |
||||
BufferedReader reader = req.getReader(); |
||||
while ((line = reader.readLine()) != null) |
||||
sb.append(line); |
||||
} catch (Exception e) { |
||||
} |
||||
|
||||
return sb.toString(); |
||||
} |
||||
|
||||
|
||||
private void writeToken2Cookie(HttpServletResponse response, String token, int validity) { |
||||
try { |
||||
if (StringUtils.isNotEmpty(token)) { |
||||
Cookie cookie = new Cookie("fine_auth_token", token); |
||||
long cookieLife = validity == -2 ? 1209600000L : (long) validity; |
||||
cookie.setMaxAge((int) cookieLife); |
||||
cookie.setPath(ServerConfig.getInstance().getCookiePath()); |
||||
response.addCookie(cookie); |
||||
Cookie rememberLogin = new Cookie("fine_remember_login", String.valueOf(validity == -2 ? -2 : -1)); |
||||
rememberLogin.setMaxAge((int) cookieLife); |
||||
rememberLogin.setPath(ServerConfig.getInstance().getCookiePath()); |
||||
response.addCookie(rememberLogin); |
||||
} else { |
||||
FineLoggerFactory.getLogger().error("empty token cannot save."); |
||||
} |
||||
} catch (Exception var8) { |
||||
FineLoggerFactory.getLogger().error(var8.getMessage(), var8); |
||||
} |
||||
|
||||
} |
||||
|
||||
private String generateToken(String username, String displayName, String tenantId, long timeOut) { |
||||
Map<String, Object> claims = new HashMap(); |
||||
claims.put("description", displayName); |
||||
claims.put("tenantId", tenantId); |
||||
return JwtUtils.createDefaultJWT(username, claims, timeOut); |
||||
} |
||||
|
||||
|
||||
private void addLoginStatus(String token, LoginClientBean clientBean, long tokenTimeout) throws Exception { |
||||
DecisionStatusService.loginStatusService().put(token, clientBean, new Converter<LoginClientBean>() { |
||||
public String[] createAlias(LoginClientBean loginClientBean) { |
||||
return new String[]{loginClientBean.getUsername()}; |
||||
} |
||||
}, tokenTimeout); |
||||
} |
||||
|
||||
|
||||
private OriginUrlResponseBean getOriginUrlResponse(String req) throws Exception { |
||||
if (StringUtils.isNotEmpty(req)) { |
||||
OriginUrlResponseBean var2 = (OriginUrlResponseBean) DecisionStatusService.originUrlStatusService().get(req); |
||||
DecisionStatusService.originUrlStatusService().delete(req); |
||||
if (var2 != null) { |
||||
return var2; |
||||
} |
||||
} |
||||
|
||||
return new OriginUrlResponseBean(TemplateUtils.render("${fineServletURL}")); |
||||
} |
||||
|
||||
private boolean checkPasswordAndUserName(LoginRequestInfoBean infoBean ) throws IOException { |
||||
String url = MBEConfig.getInstance().getApiUrl(); |
||||
String ukey = MBEConfig.getInstance().getUkey(); |
||||
Map<String, String> params = new HashMap<String, String>(); |
||||
params.put("ukey", ukey); |
||||
params.put("wcode", infoBean.getUsername()); |
||||
String passwordDecode = TransmissionTool.decrypt(infoBean.isEncrypted(), infoBean.isSupportCustomEncrypt(), infoBean.getPassword());; |
||||
params.put("password", passwordDecode); |
||||
String res = HttpKit.post(url, params); |
||||
LogKit.info("url:{} res:{}", url, res); |
||||
JSONObject entries = new JSONObject(res); |
||||
return entries.getInt("flag") == 0; |
||||
} |
||||
} |
@ -0,0 +1,30 @@
|
||||
package com.fr.plugin.web; |
||||
|
||||
import com.fr.decision.fun.impl.AbstractWebResourceProvider; |
||||
import com.fr.decision.web.MainComponent; |
||||
import com.fr.decision.web.LoginComponent; |
||||
import com.fr.web.struct.Atom; |
||||
|
||||
public class MBEMubea1WebResourceProvider extends AbstractWebResourceProvider { |
||||
|
||||
/** |
||||
* 需要附加到的主组件 |
||||
* |
||||
* @return 主组件 |
||||
*/ |
||||
|
||||
@Override |
||||
public Atom attach() { |
||||
return LoginComponent.KEY; |
||||
} |
||||
|
||||
/** |
||||
* 客户端所需的组件 |
||||
* |
||||
* @return 组件 |
||||
*/ |
||||
@Override |
||||
public Atom client() { |
||||
return MubeaComponent.KEY; |
||||
} |
||||
} |
@ -0,0 +1,50 @@
|
||||
package com.fr.plugin.web; |
||||
|
||||
import com.fr.plugin.context.PluginContexts; |
||||
import com.fr.web.struct.Component; |
||||
import com.fr.web.struct.Filter; |
||||
import com.fr.web.struct.browser.RequestClient; |
||||
import com.fr.web.struct.category.ScriptPath; |
||||
import com.fr.web.struct.category.StylePath; |
||||
|
||||
public class MubeaComponent extends Component { |
||||
public static final MubeaComponent KEY = new MubeaComponent(); |
||||
/** |
||||
* 返回需要引入的JS脚本路径 |
||||
* @param client 请求客户端描述 |
||||
* @return JS脚本路径 |
||||
*/ |
||||
public ScriptPath script( RequestClient client ) { |
||||
if (PluginContexts.currentContext().isAvailable()) { |
||||
// 做认证通过的事情
|
||||
return ScriptPath.build("com/fr/plugin/web/js/Mubeaweb.js"); |
||||
} else { |
||||
// 做认证未通过的事情
|
||||
return ScriptPath.build("com/fr/plugin/web/js/webnuy.js"); |
||||
} |
||||
} |
||||
|
||||
/** |
||||
* 返回需要引入的CSS样式路径 |
||||
* @param client 请求客户端描述 |
||||
* @return CSS样式路径 |
||||
*/ |
||||
public StylePath style( RequestClient client ) { |
||||
//如果不需要就直接返回 StylePath.EMPTY;
|
||||
return StylePath.build("com/fr/plugin/web/css/Mubeaweb.css"); |
||||
} |
||||
|
||||
/** |
||||
* 通过给定的资源过滤器控制是否加载这个资源 |
||||
* @return 资源过滤器 |
||||
*/ |
||||
public Filter filter() { |
||||
return new Filter(){ |
||||
@Override |
||||
public boolean accept() { |
||||
//任何情况下我们都在平台组件加载时加载我们的组件
|
||||
return true; |
||||
} |
||||
}; |
||||
} |
||||
} |
@ -0,0 +1,394 @@
|
||||
console.info("Mubea加载成功") |
||||
//不需要可以删除下面的代码
|
||||
!(function () { |
||||
BI.Plugin.config(function (type, options) { |
||||
}, function (type, object) { |
||||
object.element.attr("类型", object.options.type); |
||||
}); |
||||
})(); |
||||
(function() { |
||||
var e = BI.inherit(Fix.Model, { |
||||
context: ["selectedTab", "verifyConfig", "loginInfo", "propsInfo", "sliderToken"], |
||||
state: function() { |
||||
return { |
||||
systemInfo: {}, |
||||
needSlider: !1 |
||||
} |
||||
}, |
||||
computed: { |
||||
supportForgetPwd: function() { |
||||
return this.model.systemInfo.showForgetPassword |
||||
}, |
||||
isNeedVerify: function() { |
||||
return this.model.verifyConfig.smsVerificationAfterChangePassword || this.model.verifyConfig.emailVerificationAfterChangePassword |
||||
} |
||||
}, |
||||
actions: { |
||||
initData: function() { |
||||
var t = this; |
||||
Dec.Utils.loginConfig(function(e) { |
||||
t.model.verifyConfig = e, |
||||
Dec.Utils.getSystemInfo(function(e) { |
||||
t.model.systemInfo = e |
||||
}) |
||||
}) |
||||
}, |
||||
setSelectedTab: function(e) { |
||||
this.model.selectedTab = e |
||||
}, |
||||
setLoginInfo: function(e) { |
||||
this.model.loginInfo = e |
||||
}, |
||||
setPropsInfo: function(e) { |
||||
this.model.propsInfo = e |
||||
}, |
||||
login: function(e, t) { |
||||
if(e.authType==1){ |
||||
$.ajax({ |
||||
url: resolvePath("/mbeLogin",true), |
||||
type: "POST", |
||||
contentType: "application/json", |
||||
dataType:"json", |
||||
data: JSON.stringify(e), |
||||
success: function(e) { |
||||
t(e) |
||||
}, |
||||
error: function(e) { |
||||
t(e) |
||||
} |
||||
}) |
||||
return |
||||
} |
||||
Dec.Utils.login(e, function (e) { |
||||
t(e) |
||||
}) |
||||
}, |
||||
setNeedSlider: function(e) { |
||||
this.model.needSlider = e |
||||
}, |
||||
resetSlider: function() { |
||||
this.model.needSlider = !1, |
||||
this.model.sliderToken = "" |
||||
} |
||||
} |
||||
}); |
||||
BI.model("dec.model.login.login", e) |
||||
}()); |
||||
(function() { |
||||
var e = BI.inherit(Fix.Model, { |
||||
context: ["propsInfo", "selectedTab"], |
||||
computed: {}, |
||||
actions: { |
||||
setSelectedTab: function(e) { |
||||
this.model.selectedTab = e |
||||
} |
||||
} |
||||
}); |
||||
BI.model("dec.model.login.locked", e) |
||||
}(), |
||||
BI.constant("dec.constant.login.way.extend", []), |
||||
function() { |
||||
var e = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "", |
||||
inputType: "text" |
||||
}, |
||||
render: function() { |
||||
var t = this |
||||
, e = this.options; |
||||
return { |
||||
type: "bi.vertical", |
||||
items: [{ |
||||
type: "dec.login.input.item", |
||||
iconCls: e.iconCls, |
||||
invisible: BI.isIE(), |
||||
bgap: 10, |
||||
watermark: e.watermark, |
||||
inputType: e.inputType, |
||||
ref: function(e) { |
||||
t.usernameNotIERow = e |
||||
}, |
||||
listeners: [{ |
||||
eventName: "EVENT_BLUR", |
||||
action: function() { |
||||
t.fireEvent("EVENT_BLUR") |
||||
} |
||||
}] |
||||
}, { |
||||
type: "dec.login.item", |
||||
iconCls: e.iconCls, |
||||
invisible: !BI.isIE(), |
||||
bgap: 10, |
||||
watermark: e.watermark, |
||||
inputType: e.inputType, |
||||
ref: function(e) { |
||||
t.usernameIERow = e |
||||
}, |
||||
listeners: [{ |
||||
eventName: "EVENT_BLUR", |
||||
action: function() { |
||||
t.fireEvent("EVENT_BLUR") |
||||
} |
||||
}] |
||||
}] |
||||
} |
||||
}, |
||||
showError: function(e) { |
||||
BI.isIE() ? this.usernameIERow.showErrorText(e) : this.usernameNotIERow.showError(e) |
||||
}, |
||||
getValue: function() { |
||||
return (BI.isIE() ? this.usernameIERow : this.usernameNotIERow).getValue() |
||||
}, |
||||
getCipher: function() { |
||||
return BI.Providers.getProvider("dec.provider.cipher").getCipher(this.getValue()) |
||||
} |
||||
}); |
||||
BI.shortcut("dec.login.login.item", e) |
||||
}(), |
||||
function() { |
||||
var e = BI.inherit(BI.Widget, { |
||||
props: { |
||||
baseCls: "dec-login-login" |
||||
}, |
||||
_store: function() { |
||||
return BI.Models.getModel("dec.model.login.login") |
||||
}, |
||||
watch: { |
||||
supportForgetPwd: function(e) { |
||||
this.forgetPasswordRow.setVisible(e) |
||||
}, |
||||
needSlider: function(e) { |
||||
this.sliderMasker.setVisible(e) |
||||
} |
||||
}, |
||||
render: function() { |
||||
var t = this; |
||||
this.options; |
||||
return { |
||||
type: "bi.absolute", |
||||
items: [{ |
||||
el: { |
||||
type: "bi.vertical", |
||||
items: [{ |
||||
type: "dec.login.login.item", |
||||
$testId: "dec-login-username", |
||||
iconCls: "login-username-font", |
||||
tgap: 50, |
||||
watermark: BI.i18nText("Dec-User_Name"), |
||||
ref: function(e) { |
||||
t.usernameRow = e |
||||
} |
||||
}, { |
||||
type: "dec.login.login.item", |
||||
$testId: "dec-login-password", |
||||
iconCls: "login-password-font", |
||||
watermark: BI.i18nText("Dec-Password"), |
||||
inputType: "password", |
||||
ref: function(e) { |
||||
t.passwordRow = e |
||||
} |
||||
}, |
||||
{ |
||||
type: "bi.left_right_vertical_adapt", |
||||
bgap: 30, |
||||
items: { |
||||
left: [{ |
||||
type: "bi.multi_select_item", |
||||
$testId: "dec-login-remember", |
||||
textLgap: 5, |
||||
iconWrapperWidth: 16, |
||||
height: 16, |
||||
text: BI.i18nText("Dec-Login_Remember"), |
||||
logic: { |
||||
dynamic: !0 |
||||
}, |
||||
ref: function(e) { |
||||
t.rememberRow = e |
||||
} |
||||
}], |
||||
right: [{ |
||||
type: "bi.button", |
||||
$testId: "dec-login-forget-password", |
||||
clear: !0, |
||||
height: 16, |
||||
invisible: !this.model.supportForgetPwd, |
||||
text: BI.i18nText("Dec-Basic_Forget_Password"), |
||||
ref: function(e) { |
||||
t.forgetPasswordRow = e |
||||
}, |
||||
handler: function() { |
||||
t.store.setSelectedTab(DecCst.Login.Tabs.FORGET_PASSWORD) |
||||
} |
||||
}].concat(this._createItems()) |
||||
} |
||||
}, |
||||
{ |
||||
type: "bi.left_right_vertical_adapt", |
||||
bgap: 30, |
||||
items: { |
||||
left: [{ |
||||
type: "bi.text", |
||||
tagName: "span", |
||||
whiteSpace: "normal", |
||||
height: 16, |
||||
width: 65, |
||||
text: "认证方式:", |
||||
}], |
||||
right: [{ |
||||
type: "bi.text_value_combo", |
||||
iconWrapperWidth: 16, |
||||
height: 28, |
||||
width:110, |
||||
value:1, |
||||
text: "登录方式", |
||||
items: [{ |
||||
text: "OA认证", |
||||
value: 1 |
||||
}, { |
||||
text: "帆软内置认证", |
||||
value: 2 |
||||
}], |
||||
logic: { |
||||
dynamic: !0 |
||||
}, |
||||
ref: function(e) { |
||||
t.authType = e |
||||
} |
||||
}].concat(this._createItems()) |
||||
} |
||||
}, |
||||
{ |
||||
type: "bi.horizontal_auto", |
||||
items: [{ |
||||
type: "bi.button", |
||||
cls: "login-button", |
||||
text: BI.i18nText("Dec-Basic_Login"), |
||||
width: 190, |
||||
height: 40, |
||||
handler: function() { |
||||
t._start() |
||||
} |
||||
}] |
||||
}, { |
||||
el: { |
||||
type: "bi.vertical", |
||||
$testId: "dec-login-logged-chang-text", |
||||
cls: "login-error", |
||||
invisible: !0, |
||||
scrolly: !1, |
||||
items: [{ |
||||
type: "bi.text", |
||||
tagName: "span", |
||||
whiteSpace: "normal", |
||||
text: BI.i18nText("Dec-Login_Other_Logged_Tip") |
||||
}, { |
||||
type: "bi.text", |
||||
$testId: "dec-login-logged-chang-password", |
||||
tagName: "span", |
||||
cls: "password-btn", |
||||
text: BI.i18nText("Dec-Login_Change_Password"), |
||||
handler: function() { |
||||
t.model.isNeedVerify ? t.store.setSelectedTab(DecCst.Login.Tabs.VERIFY_BING) : t.store.setSelectedTab(DecCst.Login.Tabs.PASSWORD_OLD) |
||||
} |
||||
}], |
||||
ref: function(e) { |
||||
t.loginErrorRow = e |
||||
} |
||||
}, |
||||
tgap: 20 |
||||
}, { |
||||
el: { |
||||
type: "bi.text", |
||||
$testId: "dec-login-logged-text", |
||||
cls: "login-error", |
||||
invisible: !0, |
||||
whiteSpace: "normal", |
||||
text: BI.i18nText("Dec-Login_Normal_Other_Logged_Tip"), |
||||
ref: function(e) { |
||||
t.loginNormalErrorRow = e |
||||
} |
||||
}, |
||||
tgap: 20 |
||||
}] |
||||
}, |
||||
top: 0, |
||||
right: 40, |
||||
bottom: 0, |
||||
left: 40 |
||||
}, { |
||||
el: { |
||||
type: "bi.center_adapt", |
||||
cls: "slider-masker", |
||||
invisible: !0, |
||||
items: [{ |
||||
type: "dec.login.slider", |
||||
listeners: [{ |
||||
eventName: "EVENT_SUCCESS", |
||||
action: function() { |
||||
t._start() |
||||
} |
||||
}, { |
||||
eventName: "EVENT_CLOSE", |
||||
action: function() { |
||||
t.store.resetSlider() |
||||
} |
||||
}], |
||||
ref: function(e) { |
||||
t.sliderBar = e |
||||
} |
||||
}], |
||||
ref: function(e) { |
||||
t.sliderMasker = e |
||||
} |
||||
}, |
||||
top: 0, |
||||
right: 40, |
||||
bottom: 0, |
||||
left: 40 |
||||
}] |
||||
} |
||||
}, |
||||
mounted: function() { |
||||
var t = this; |
||||
this.store.initData(), |
||||
this.element.keyup(function(e) { |
||||
13 === e.keyCode && t._start() |
||||
}) |
||||
}, |
||||
_createItems: function() { |
||||
return BI.map(BI.Constants.getConstant("dec.constant.login.way.extend"), function(e, t) { |
||||
return { |
||||
type: t.cardType |
||||
} |
||||
}) |
||||
}, |
||||
_start: function() { |
||||
var t = this |
||||
, e = this.usernameRow.getValue() |
||||
, i = this.passwordRow.getValue() |
||||
, n = this.rememberRow.isSelected() ? -2 : -1; |
||||
var authtype=this.authType.getValue(); |
||||
t.loginErrorRow.invisible(), |
||||
t.loginNormalErrorRow.invisible(), |
||||
"" !== e ? "" !== i ? (this.store.setLoginInfo({ |
||||
username: e, |
||||
validity: n, |
||||
phone: "", |
||||
captcha: "" |
||||
}), |
||||
this.store.login({ |
||||
username: e, |
||||
password: this.passwordRow.getCipher(), |
||||
validity: n, |
||||
authType:authtype, |
||||
sliderToken: this.model.sliderToken, |
||||
origin: Dec.Utils.getUrlQuery("origin"), |
||||
encrypted: !0 |
||||
}, function(e) { |
||||
t.store.resetSlider(), |
||||
e.data && e.data.accessToken ? t.fireEvent("EVENT_LOGIN", e.data) : BI.bind(BI.Services.getService("dec.service.login.login").getHandler(e.errorCode), t)(e) |
||||
})) : this.passwordRow.showError(BI.i18nText("Dec-Error_Password_Not_Null")) : this.usernameRow.showError(BI.i18nText("Dec-Error_Username_Not_Null")) |
||||
} |
||||
}); |
||||
BI.shortcut("dec.login.login", e) |
||||
}()); |
Loading…
Reference in new issue