You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

74 lines
2.4 KiB

using System;
using System.Collections.Generic;
using Bwp.MainSystem.Auth;
using Forks.EnterpriseServices.BusinessInterfaces;
using Forks.EnterpriseServices.DomainObjects2;
using Forks.EnterpriseServices.DomainObjects2.DQuery;
using Forks.EnterpriseServices.SqlDoms;
using TSingSoft.WebPluginFramework;
namespace BWP.B3DogAuth {
public class DogAuthPlugin : IAuthPlugin {
public void Auth(IDictionary<string, object> context) {
if (UserAndPasswordOnly(context)) {
return;
}
if (context.ContainsKey("SkipPasswordAuth")) {
return;
}
var name = (string)context["Name"];
if (context.ContainsKey("VerifyCode")) {
var verifyCode = (string)context["VerifyCode"];
if (!MobileAuthCenter.Auth(name, verifyCode)) {
throw new Exception("验证码不正确");
}
}
else {
int dogNo;
if (int.TryParse(name, out dogNo)) {
context["Name"] = DogNoToUserName(dogNo);
context.Add("DogAuthNo", name);
}
else {
if (AllowNoDog) {
CheckNoDogUserName(name);
}
else {
throw new WpfException("Internal error: 43bb83d0-3388-4cde-9459-4dc9a44918e4 " + name);
}
}
}
}
static bool UserAndPasswordOnly(IDictionary<string, object> context) {
return context.EGetDefault<bool>("UserAndPasswordOnly");
}
static string DogNoToUserName(int dogNo) {
IDogLoginUserBL bl = BIFactory.Create<IDogLoginUserBL>();
var dogLoginUser = bl.Load(dogNo);
if (dogLoginUser == null) {
throw new WpfException(string.Format("您当前的黑贝序号是{0},没有在黑贝认证中定义", dogNo));
}
return dogLoginUser.User_Name;
}
static void CheckNoDogUserName(string userName) {
var query = new DQueryDom(new JoinAlias(typeof(DogLoginUser)));
query.Where.Conditions.Add(DQCondition.EQ("User_Name", userName));
query.Range = SelectRange.Top(1);
query.Columns.Add(DQSelectColumn.Field("ID"));
using (IDmoSession session = Dmo.NewSession()) {
if (session.ExecuteScalar(query) != null) {
throw new Exception(string.Format("用户名{0}必须使用黑贝登录", userName));
}
}
}
public static bool AllowNoDog {
get { return Wpf.Parameters.AsBool("B3DogAuth.AllowUnConfigedDog"); }
}
}
}