initial version with inspection edition
This commit is contained in:
528
IronIntelContractor/FIC/FICHost.cs
Normal file
528
IronIntelContractor/FIC/FICHost.cs
Normal file
@ -0,0 +1,528 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Data;
|
||||
using System.Net.Mail;
|
||||
using System.IO;
|
||||
using System.Xml;
|
||||
using Newtonsoft.Json;
|
||||
using Foresight.Data;
|
||||
using Foresight.Security.License;
|
||||
using System.Web;
|
||||
using System.Runtime.Serialization.Formatters.Binary;
|
||||
using FI.FIC;
|
||||
using IronIntel.DataModel.Contractor.Users;
|
||||
using FI.FIC.Contracts.DataObjects.Enumeration;
|
||||
using IronIntel.DataModel;
|
||||
using IronIntel.Contractor.Site;
|
||||
|
||||
namespace IronIntel.Contractor.FIC
|
||||
{
|
||||
public class FICHost : IFICHost
|
||||
{
|
||||
static readonly Guid FIC_MODULE_ID = new Guid("1c6dfe25-347d-4889-ab75-73ade9190d27");
|
||||
const string FIC_MODULE_NAME = "Foresight Intelligence Center";
|
||||
const string FIC_MODULE_VERSION = "3.0";
|
||||
|
||||
public string FICDbConnectionString
|
||||
{
|
||||
get
|
||||
{
|
||||
return ContractorHost.Instance.FICDbConnectionString;
|
||||
}
|
||||
}
|
||||
|
||||
public string FrsDbConnectionString
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
public bool FICInstalled
|
||||
{
|
||||
get
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public bool FRSInstalled
|
||||
{
|
||||
get
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static void Init()
|
||||
{
|
||||
FICHostEnvironment.SetHost(new FICHost());
|
||||
}
|
||||
|
||||
public byte[] GetCacheData(string key, bool ignoreExpired, ref DateTime createTime)
|
||||
{
|
||||
byte[] buffer = CacheManager.GetValue(key);
|
||||
if (buffer == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
byte[] tmp = Foresight.Security.SecurityHelper.Decompress(buffer);
|
||||
FICCacheObject fc = new FICCacheObject();
|
||||
fc.FromBuffer(tmp);
|
||||
createTime = fc.CreateTime;
|
||||
return fc.Data;
|
||||
}
|
||||
|
||||
public DataTable GetCacheDataTable(string key, bool ignoreExpired, ref DateTime createTime)
|
||||
{
|
||||
byte[] buffer = GetCacheData(key, ignoreExpired, ref createTime);
|
||||
if (buffer == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
//FIDataTable tb = new FIDataTable();
|
||||
//tb.FillFromBuffer(buffer);
|
||||
//return FIDbAccess.ConvertDataTable(tb);
|
||||
return Deserialize(buffer) as DataTable;
|
||||
}
|
||||
|
||||
public FICCompanyInfo GetCompanyInfo()
|
||||
{
|
||||
var cp = ContractorHost.Instance.Customer;
|
||||
FICCompanyInfo ficcp = new FICCompanyInfo();
|
||||
ficcp.ID = cp.ID;
|
||||
ficcp.Name = cp.Name;
|
||||
|
||||
return ficcp;
|
||||
}
|
||||
|
||||
public CompanyLic GetLicense()
|
||||
{
|
||||
var lic = ContractorHost.Instance.GetLicense();
|
||||
if (lic == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
CompanyLic ci = new CompanyLic();
|
||||
ci.CompanyID = ContractorHost.Instance.Customer.ID;
|
||||
ci.CompanyName = ContractorHost.Instance.Customer.Name;
|
||||
|
||||
Foresight.Security.License.LicenseInfo li = new Foresight.Security.License.LicenseInfo();
|
||||
ci.Licenses.Add(li);
|
||||
li.CompanyID = ci.CompanyID;
|
||||
li.CompanyName = ci.CompanyName;
|
||||
li.Expiration = lic.ExpireDate;
|
||||
li.ID = Guid.Empty;
|
||||
li.StartDate = lic.StartDate;
|
||||
li.ModuleID = FIC_MODULE_ID;
|
||||
li.ModuleName = FIC_MODULE_NAME;
|
||||
li.Version = FIC_MODULE_VERSION;
|
||||
|
||||
foreach (var item in lic.Items)
|
||||
{
|
||||
var prop = ConvertLicenseItem(item);
|
||||
if (prop != null)
|
||||
{
|
||||
li.AddtionalPropertes.Add(prop);
|
||||
}
|
||||
}
|
||||
|
||||
return ci;
|
||||
}
|
||||
|
||||
private LicenseAddtionalPropertyObj ConvertLicenseItem(DataModel.LicenseItem item)
|
||||
{
|
||||
if (item == null)
|
||||
return null;
|
||||
switch (item.Key)
|
||||
{
|
||||
case "ColumnLineCombChart":
|
||||
return new LicenseAddtionalPropertyObj { Key = "ColumnLineCombChart", Value = item.Value, Description = item.Description };
|
||||
case "ExportChartToXPS":
|
||||
return new LicenseAddtionalPropertyObj { Key = "ExportChartToXPS", Value = item.Value, Description = item.Description };
|
||||
case "FreeChart":
|
||||
return new LicenseAddtionalPropertyObj { Key = "FreeChart", Value = item.Value, Description = item.Description };
|
||||
case "DrilldownToURL":
|
||||
return new LicenseAddtionalPropertyObj { Key = "DrilldownToURL", Value = item.Value, Description = item.Description };
|
||||
case "MaxCharts":
|
||||
return new LicenseAddtionalPropertyObj { Key = "MaxCharts", Value = item.Value, Description = item.Description };
|
||||
case "MaxDataTables":
|
||||
return new LicenseAddtionalPropertyObj { Key = "MaxDataTables", Value = item.Value, Description = item.Description };
|
||||
case "PrintChart":
|
||||
return new LicenseAddtionalPropertyObj { Key = "PrintChart", Value = item.Value, Description = item.Description };
|
||||
case "ScatterChart":
|
||||
return new LicenseAddtionalPropertyObj { Key = "ScatterChart", Value = item.Value, Description = item.Description };
|
||||
case "Snapshot":
|
||||
return new LicenseAddtionalPropertyObj { Key = "Snapshot", Value = item.Value, Description = item.Description };
|
||||
case "SQLGenerator":
|
||||
return new LicenseAddtionalPropertyObj { Key = "SQLGenerator", Value = item.Value, Description = item.Description };
|
||||
//case "MainStyle":
|
||||
//case "MaxAdminCount":
|
||||
//case "MaxLogins":
|
||||
//case "MaxNormalUerCount":
|
||||
//case "MaxReadOnlyUserCount":
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public string GetResourceLock(string resourceid, int locksecond)
|
||||
{
|
||||
return ContractorHost.Instance.GetResourceLock(resourceid, locksecond);
|
||||
}
|
||||
|
||||
private static FICUserInfo ConvertToFICUserInfo(IronIntel.DataModel.Contractor.Users.UserInfo ui)
|
||||
{
|
||||
var user = new FICUserInfo
|
||||
{
|
||||
ID = ui.ID,
|
||||
IID = ui.UID,
|
||||
Enabled = ui.Active,
|
||||
DisplayName = ui.Name,
|
||||
Mobile = ui.Mobile,
|
||||
BusinessPhone = ui.BusinessPhone,
|
||||
};
|
||||
switch (ui.UserType)
|
||||
{
|
||||
case UserTypes.Common:
|
||||
user.UserType = FICUserTypes.Common;
|
||||
break;
|
||||
case UserTypes.Admin:
|
||||
user.UserType = FICUserTypes.Admin;
|
||||
break;
|
||||
case UserTypes.Readonly:
|
||||
user.UserType = FICUserTypes.Readonly;
|
||||
break;
|
||||
case UserTypes.SupperAdmin:
|
||||
user.UserType = FICUserTypes.SuperAdmin;
|
||||
break;
|
||||
default:
|
||||
user.UserType = FICUserTypes.Readonly;
|
||||
break;
|
||||
}
|
||||
return user;
|
||||
}
|
||||
|
||||
public FICUserInfo GetUserByIID(string useriid)
|
||||
{
|
||||
var um = ContractorHost.Instance.GetUserManager();
|
||||
var ui = um.GetUserByIID(useriid);
|
||||
if (ui == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return ConvertToFICUserInfo(ui);
|
||||
}
|
||||
|
||||
public FICUserInfo GetUserByLoginSessionID(string sessionid)
|
||||
{
|
||||
var um = ContractorHost.Instance.GetUserManager();
|
||||
|
||||
UserInfo ui = um.GetUserByLoginSessionID(sessionid);
|
||||
if (ui == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return ConvertToFICUserInfo(ui);
|
||||
}
|
||||
|
||||
public FICUserInfo GetUserByUserID(string userId)
|
||||
{
|
||||
var um = ContractorHost.Instance.GetUserManager();
|
||||
|
||||
UserInfo ui = um.GetUserByID(userId);
|
||||
if (ui == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return ConvertToFICUserInfo(ui);
|
||||
}
|
||||
|
||||
public FICUserInfo[] GetUsers()
|
||||
{
|
||||
var um = ContractorHost.Instance.GetUserManager();
|
||||
UserInfo[] users = um.GetSelfUsers();
|
||||
List<FICUserInfo> ls = new List<FICUserInfo>(users.Length);
|
||||
foreach (UserInfo ui in users)
|
||||
{
|
||||
ls.Add(ConvertToFICUserInfo(ui));
|
||||
}
|
||||
return ls.ToArray();
|
||||
}
|
||||
|
||||
public string GetUserEmail(string useriid)
|
||||
{
|
||||
var um = ContractorHost.Instance.GetUserManager();
|
||||
UserInfo ui = um.GetUserByIID(useriid);
|
||||
if (ui == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
else
|
||||
{
|
||||
return ui.ID;
|
||||
}
|
||||
}
|
||||
|
||||
public void PostMessage(int category, string msg)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public void ReleaseResourceLock(string lockid)
|
||||
{
|
||||
ContractorHost.Instance.ReleaseLock(lockid);
|
||||
}
|
||||
|
||||
public void RemoveCache(string key)
|
||||
{
|
||||
CacheManager.Remove(key);
|
||||
}
|
||||
|
||||
public void SendMail(MailMessage message)
|
||||
{
|
||||
try
|
||||
{
|
||||
ContractorHost.Instance.SendEmail(ContractorHost.Instance.CustomerID, "FIC", message);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
ContractorHost.Instance.WriteLog("Error", this.GetType().FullName + ".SendMail(MailMessage)", "Add fic mail to mail service failed", ex.ToString(), string.Empty);
|
||||
}
|
||||
}
|
||||
|
||||
public void SetCacheData(string key, byte[] buffer, int expirationsecond, bool slidingExpiration, DateTime createTime)
|
||||
{
|
||||
if (buffer == null)
|
||||
{
|
||||
RemoveCache(key);
|
||||
return;
|
||||
}
|
||||
FICCacheObject fc = new FICCacheObject();
|
||||
fc.Data = buffer;
|
||||
fc.CreateTime = createTime;
|
||||
|
||||
byte[] tmp = Foresight.Security.SecurityHelper.Compress(fc.ToBuffer());
|
||||
CacheManager.SetValue(key, tmp, TimeSpan.FromSeconds(expirationsecond));
|
||||
}
|
||||
|
||||
public void SetCacheDataTable(string key, DataTable dt, int expirationsecond, bool slidingExpiration, DateTime createTime)
|
||||
{
|
||||
if (dt == null)
|
||||
{
|
||||
RemoveCache(key);
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] buffer = Serialize(dt, createTime);
|
||||
SetCacheData(key, buffer, expirationsecond, slidingExpiration, createTime);
|
||||
}
|
||||
}
|
||||
|
||||
public void SubscribeMessage(int category, Action<IEnumerable<MessageInformation>> action)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public void WriteLog(string logType, string category, string source, string message, string detail)
|
||||
{
|
||||
ContractorHost.Instance.WriteLog(logType, source, message, detail,category);
|
||||
}
|
||||
|
||||
public List<string> GetUserGroupIDByUserIID(string userIID)
|
||||
{
|
||||
var grps = ContractorHost.Instance.GetUserManager().GetGroupsByUserIID(userIID);
|
||||
List<string> ls = new List<string>(grps.Length);
|
||||
foreach(var grp in grps)
|
||||
{
|
||||
ls.Add(grp.ID);
|
||||
}
|
||||
return ls;
|
||||
}
|
||||
|
||||
public FICUserInfo[] GetUsers(bool hasAdmin)
|
||||
{
|
||||
if (!hasAdmin)
|
||||
{
|
||||
return GetUsers();
|
||||
}
|
||||
|
||||
var um = ContractorHost.Instance.GetUserManager();
|
||||
|
||||
UserInfo[] localusers = um.GetSelfUsers();
|
||||
UserInfo[] foresightusers = um.GetForesightUsers();
|
||||
UserInfo[] users = localusers.Union(foresightusers).ToArray();
|
||||
List<FICUserInfo> ls = new List<FICUserInfo>(users.Length);
|
||||
foreach (UserInfo ui in users)
|
||||
{
|
||||
ls.Add(ConvertToFICUserInfo(ui));
|
||||
}
|
||||
return ls.ToArray();
|
||||
}
|
||||
|
||||
public LoginContext GetCurrentLoginContext(HttpContext context)
|
||||
{
|
||||
string session = Site.IronIntelBasePage.GetLoginSessionID(context.Request);
|
||||
if (string.IsNullOrWhiteSpace(session))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
LoginContext lc = new LoginContext();
|
||||
lc.SessionID = session;
|
||||
lc.User = GetUserByLoginSessionID(session);
|
||||
lc.LanguageID = GetLgID(context);
|
||||
return lc;
|
||||
}
|
||||
|
||||
private string GetLgID(HttpContext context)
|
||||
{
|
||||
var language = context.Request.Cookies[IronIntelBasePage.LANGUAGECOOKIENAME];
|
||||
if (language != null)
|
||||
{
|
||||
return language.Value;
|
||||
}
|
||||
return ResLanguage.ClientCurrentLanguage;
|
||||
}
|
||||
|
||||
public string ProductEdition
|
||||
{
|
||||
get
|
||||
{
|
||||
return "General";
|
||||
}
|
||||
}
|
||||
|
||||
public string FIExternalDBConnectionString
|
||||
{
|
||||
get
|
||||
{
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
public SpecialDatabaseConnectionInfo[] GetSpecialDatabaseConnections()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public string GetStyleDefines(string useriid)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
//StringBuilder s = new StringBuilder();
|
||||
//s.Append(@"<?xml version=""1.0"" encoding=""UTF-8""?>");
|
||||
//s.Append("<root>");
|
||||
//s.Append("<Workspace><Title><Background>#ff00ff</Background><Foreground>#222222</Foreground></Title></Workspace>");
|
||||
//s.Append("<Chart><Title><Background>#333333</Background><Foreground>#444444</Foreground></Title><Board>#555555</Board></Chart>");
|
||||
//s.Append("<Board><Title><Background>#666666</Background><Foreground>#777777</Foreground></Title></Board>");
|
||||
//s.Append("</root>");
|
||||
//return s.ToString();
|
||||
//// Services.CustUIStyle uistyle = SystemParams.GetUIStyle(useriid);
|
||||
|
||||
// StringBuilder s = new StringBuilder();
|
||||
// s.Append(@"<?xml version=""1.0"" encoding=""UTF-8""?>");
|
||||
// s.Append("<root>");
|
||||
// s.Append("<Workspace><Title><Background></Background><Foreground>#000000</Foreground></Title></Workspace>");
|
||||
// s.Append("<Chart><Title><Background>" + uistyle.ChartTitleBackgroundColor + "</Background><Foreground></Foreground></Title><Board>" + uistyle.ChartBorderColor + "</Board></Chart>");
|
||||
// //s.Append("<Board><Title><Background>#666666</Background><Foreground>#777777</Foreground></Title></Board>");
|
||||
// s.Append("</root>");
|
||||
// return s.ToString();
|
||||
}
|
||||
public Dictionary<string, string> GetAdditionalParameter()
|
||||
{
|
||||
Dictionary<string, string> dic = new Dictionary<string, string>();
|
||||
dic.Add("ConnectorToken", ContractorHost.Instance.ContractorSystemParams.GetFICStringParam("ConnectorToken"));
|
||||
dic.Add("ConnectorServer", ContractorHost.Instance.ContractorSystemParams.GetFICStringParam("ConnectorServer"));
|
||||
dic.Add("LdapAgentID", ContractorHost.Instance.ContractorSystemParams.GetFICStringParam("LdapAgentID"));
|
||||
dic.Add("LdapAgentToken", ContractorHost.Instance.ContractorSystemParams.GetFICStringParam("LdapAgentToken"));
|
||||
dic.Add("CanUseConnectorLDAP", ContractorHost.Instance.ContractorSystemParams.GetFICStringParam("CanUseConnectorLDAP"));
|
||||
|
||||
return dic;
|
||||
}
|
||||
|
||||
public FICUserInfo[] GetSimpleUsers(bool hasAdmin)
|
||||
{
|
||||
var users = GetUsers(hasAdmin);
|
||||
List<FICUserInfo> ls = new List<FICUserInfo>();
|
||||
foreach (var user in users)
|
||||
{
|
||||
var us = new FICUserInfo();
|
||||
us.IID = user.IID;
|
||||
us.ID = user.ID;
|
||||
us.DisplayName = user.DisplayName;
|
||||
ls.Add(us);
|
||||
}
|
||||
return ls.ToArray();
|
||||
}
|
||||
|
||||
class FICCacheObject
|
||||
{
|
||||
public byte[] Data = null;
|
||||
public DateTime CreateTime = DateTime.Now;
|
||||
|
||||
public byte[] ToBuffer()
|
||||
{
|
||||
byte[] rst = new byte[Data.Length + 8];
|
||||
byte[] bf1 = BitConverter.GetBytes(CreateTime.Ticks);
|
||||
Buffer.BlockCopy(bf1, 0, rst, 0, 8);
|
||||
Buffer.BlockCopy(Data, 0, rst, 8, Data.Length);
|
||||
|
||||
return rst;
|
||||
}
|
||||
|
||||
public void FromBuffer(byte[] buffer)
|
||||
{
|
||||
long l = BitConverter.ToInt64(buffer, 0);
|
||||
CreateTime = new DateTime(l);
|
||||
Data = new byte[buffer.Length - 8];
|
||||
Buffer.BlockCopy(buffer, 8, Data, 0, buffer.Length - 8);
|
||||
}
|
||||
}
|
||||
|
||||
#region - (De)Serialize -
|
||||
|
||||
private static byte[] Serialize(object obj, DateTime createtime)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var cacheObj = new RedisCacheObject
|
||||
{
|
||||
CreateTime = createtime,
|
||||
Data = obj
|
||||
};
|
||||
byte[] data;
|
||||
using (var ms = new MemoryStream())
|
||||
{
|
||||
new BinaryFormatter().Serialize(ms, cacheObj);
|
||||
data = ms.ToArray();
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
private static object Deserialize(byte[] buffer)
|
||||
{
|
||||
using (var ms = new MemoryStream(buffer, false))
|
||||
{
|
||||
return new BinaryFormatter().Deserialize(ms);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
[Serializable]
|
||||
class RedisCacheObject
|
||||
{
|
||||
public DateTime CreateTime { get; set; }
|
||||
public object Data { get; set; }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user