|
|
using System.Reflection.Emit;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Threading;
|
|
|
using System.Collections;
|
|
|
using System.Reflection;
|
|
|
using UMC.Web;
|
|
|
using UMC.Data.Entities;
|
|
|
using UMC.Web.UI;
|
|
|
using UMC.ITME.Entities;
|
|
|
|
|
|
namespace UMC.ITME.Activities
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 邮箱账户
|
|
|
/// </summary>
|
|
|
[UMC.Web.Apiumc("ITME", "Mime", Auth = WebAuthType.User)]
|
|
|
public class SiteMimeActivity : WebActivity
|
|
|
{
|
|
|
bool Check(Hashtable login)
|
|
|
{
|
|
|
var rawUrl = login["RawUrl"] as string;
|
|
|
if (String.IsNullOrEmpty(rawUrl))
|
|
|
{
|
|
|
this.Prompt("接口请求路径未配置");
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
var Method = login["Method"] as string;
|
|
|
if (String.IsNullOrEmpty(Method))
|
|
|
{
|
|
|
this.Prompt("接口提交方式未配置");
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
switch (Method)
|
|
|
{
|
|
|
case "POST":
|
|
|
case "PUT":
|
|
|
var ContentType = login["ContentType"] as string;
|
|
|
if (String.IsNullOrEmpty(ContentType))
|
|
|
{
|
|
|
|
|
|
this.Prompt("接口提交类型未配置");
|
|
|
return false;
|
|
|
}
|
|
|
var value = login["Content"] as string;
|
|
|
if (String.IsNullOrEmpty(value))
|
|
|
{
|
|
|
|
|
|
this.Prompt("接口提交内容未配置");
|
|
|
return false;
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
var Finish = login["Finish"] as string;
|
|
|
if (String.IsNullOrEmpty(Finish))
|
|
|
{
|
|
|
this.Prompt("未配置效验格式");
|
|
|
return false;
|
|
|
}
|
|
|
return true;
|
|
|
}
|
|
|
public override void ProcessActivity(WebRequest request, WebResponse response)
|
|
|
{
|
|
|
var Key = this.AsyncDialog("Key", g =>
|
|
|
{
|
|
|
this.Prompt("请传入KEY");
|
|
|
return this.DialogValue("none");
|
|
|
});
|
|
|
var mainKey = String.Format("SITE_MIME_{0}", Key).ToUpper();
|
|
|
var config = UMC.Data.DataFactory.Instance().Config(mainKey);
|
|
|
var value = new Hashtable();
|
|
|
if (config != null)
|
|
|
{
|
|
|
var v = UMC.Data.JSON.Deserialize(config.ConfValue) as Hashtable;
|
|
|
if (v != null)
|
|
|
{
|
|
|
value = v;
|
|
|
}
|
|
|
|
|
|
}
|
|
|
var ks = Key.Split('_');
|
|
|
|
|
|
var typeKey = String.Empty;
|
|
|
if (ks.Length == 2)
|
|
|
{
|
|
|
typeKey = ks[1].ToUpper();
|
|
|
}
|
|
|
|
|
|
var Model = this.AsyncDialog("Model", g =>
|
|
|
{
|
|
|
|
|
|
var title = UITitle.Create();
|
|
|
|
|
|
title.Title = "接口MIME";
|
|
|
title.Right(new UIEventText("跨域").Click(new UIClick( request, g, "Domain")));
|
|
|
|
|
|
|
|
|
var ui = UISection.Create(title);
|
|
|
switch (typeKey)
|
|
|
{
|
|
|
case "LOGIN":
|
|
|
title.Title = "登录接口";
|
|
|
break;
|
|
|
case "UPDATE":
|
|
|
title.Title = "密码托管接口";
|
|
|
break;
|
|
|
case "CHECK":
|
|
|
title.Title = "账户检测接口";
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
var Method = value["Method"] as string;
|
|
|
var RawUrl = value["RawUrl"] as string;
|
|
|
|
|
|
|
|
|
var Domain = value["Domain"] as string;
|
|
|
if (String.IsNullOrEmpty(Domain) == false)
|
|
|
{
|
|
|
ui.AddCell("跨域域名", Domain, new UIClick( request, g, "UnDomain"));
|
|
|
ui.AddCell("提交路径", String.IsNullOrEmpty(RawUrl) ? "未设置" : RawUrl, new UIClick( request, g, "RawUrl"));
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
|
|
|
ui.AddCell("提交路径", String.IsNullOrEmpty(RawUrl) ? "未设置" : RawUrl, new UIClick( request, g, "RawUrl"));
|
|
|
}
|
|
|
ui.NewSection().AddCell("提交方式", String.IsNullOrEmpty(Method) ? "未设置" : Method, new UIClick(request,g, "Method"));
|
|
|
var Header = value["Header"] as string;
|
|
|
ui.NewSection().AddCell("提交表头", String.IsNullOrEmpty(Header) ? "未设置" : "已设置", new UIClick(request,g, "Header"));
|
|
|
|
|
|
|
|
|
if (String.Equals("GET", Method) == false)
|
|
|
{
|
|
|
var ContentType = value["ContentType"] as string ?? "";
|
|
|
if (ContentType.EndsWith("urlencoded"))
|
|
|
{
|
|
|
ContentType = "表单格式";
|
|
|
}
|
|
|
else if (ContentType.EndsWith("json"))
|
|
|
{
|
|
|
ContentType = "JSON格式";
|
|
|
}
|
|
|
else if (ContentType.EndsWith("xml"))
|
|
|
{
|
|
|
ContentType = "Xml格式";
|
|
|
|
|
|
}
|
|
|
else if (String.IsNullOrEmpty(ContentType))
|
|
|
{
|
|
|
ContentType = "未设置";
|
|
|
|
|
|
}
|
|
|
|
|
|
ui.NewSection().AddCell("提交类型", ContentType, new UIClick( request, g, "ContentType"));
|
|
|
|
|
|
var content = value["Content"] as string;
|
|
|
|
|
|
ui.NewSection().AddCell("提交内容", String.IsNullOrEmpty(content) ? "未设置" : "已设置", new UIClick(request,g, "Content"));
|
|
|
// }
|
|
|
// else if (mainKey.EndsWith("_LOGIN") == false && mainKey.EndsWith("_UPDATE") == false && mainKey.EndsWith("_CHECK") == false)
|
|
|
// {
|
|
|
// var content = value["Content"] as string;
|
|
|
|
|
|
// ui.NewSection().AddCell("脚本环境", String.IsNullOrEmpty(content) ? "未设置" : "已设置", new UIClick(new WebMeta(request.Arguments).Put(g, "Content"));
|
|
|
|
|
|
}
|
|
|
switch (typeKey)
|
|
|
{
|
|
|
case "LOGIN":
|
|
|
case "UPDATE":
|
|
|
case "CHECK":
|
|
|
var Finish = value["Finish"] as string;
|
|
|
var root = Key.Substring(0, Key.LastIndexOf('_'));
|
|
|
|
|
|
ui.NewSection().AddCell("检测格式", String.IsNullOrEmpty(Finish) ? "未设置" : "已设置", new UIClick(request,g, "Finish"));
|
|
|
|
|
|
var fui = ui.NewSection();
|
|
|
fui.AddCell("扩展字段", "新增", new UIClick(request,g, "Feilds"));
|
|
|
var feilds = value["Feilds"] as Hashtable;
|
|
|
if (feilds != null && feilds.Count > 0)
|
|
|
{
|
|
|
var fd = feilds.Keys.Cast<String>().OrderBy(r => r).GetEnumerator();
|
|
|
|
|
|
while (fd.MoveNext())
|
|
|
{
|
|
|
var cell = new WebMeta().Put("value", fd.Current).Put("text", feilds[fd.Current]);
|
|
|
|
|
|
cell.Put("click", new UIClick(request,"Key", Key + "_" + fd.Current));
|
|
|
var uICell = UICell.Create("Cell", cell);
|
|
|
if (fd.Current == "LoginAfter")
|
|
|
{
|
|
|
uICell.Style.Name("value").Color(0xff4949);
|
|
|
// uICell.Style.Name("text").Color(0xff4949);
|
|
|
}
|
|
|
fui.Delete(uICell, new UIEventText("移除").Click(new UIClick(request,g, fd.Current)));
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
switch (typeKey)
|
|
|
{
|
|
|
case "LOGIN":
|
|
|
{
|
|
|
ui.NewSection().AddCell("登录清空会话", value.ContainsKey("IsNotCookieClear") ? "不清空" : "清空", new UIClick(request,g, "IsNotCookieClear"));
|
|
|
|
|
|
|
|
|
if (value.ContainsKey("IsLoginHTML"))
|
|
|
{
|
|
|
|
|
|
ui.NewSection()
|
|
|
.AddCell("内容转化配置", new UIClick(request,g, "Script"))
|
|
|
.NewSection().AddCell("前端页面登录", "已启用", new UIClick(request,g, "IsLoginHTML"))
|
|
|
|
|
|
.AddCell("前端页面内容配置", new UIClick(request.Model, "Conf",String.Format("{0}_HTML", mainKey).ToUpper()));
|
|
|
|
|
|
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
ui.NewSection().AddCell("前端页面登录", "未启用", new UIClick(request,g, "IsLoginHTML"));
|
|
|
}
|
|
|
|
|
|
var Callback = value["Callback"] as string;
|
|
|
ui.NewSection().AddCell("跳转参数", String.IsNullOrEmpty(Callback) ? "未设置" : "已设置", new UIClick(request,g, "Callback"));
|
|
|
|
|
|
}
|
|
|
break;
|
|
|
case "UPDATE":
|
|
|
{
|
|
|
var UpdateModel = value["UpdateModel"] as String ?? "Selected";
|
|
|
switch (UpdateModel)
|
|
|
{
|
|
|
case "Selected":
|
|
|
UpdateModel = "默认选中";
|
|
|
break;
|
|
|
case "Select":
|
|
|
UpdateModel = "默认不选中";
|
|
|
break;
|
|
|
case "Compel":
|
|
|
UpdateModel = "强制托管";
|
|
|
break;
|
|
|
case "Disable":
|
|
|
UpdateModel = "禁用托管";
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
ui.NewSection().AddCell("密码托管模式", UpdateModel, new UIClick( request, g, "UpdateModel"));
|
|
|
|
|
|
}
|
|
|
break;
|
|
|
case "CHECK":
|
|
|
{
|
|
|
var site = DataFactory.Instance().Site(root.ToLower());
|
|
|
if (site != null)
|
|
|
{
|
|
|
var userM = "未启用";
|
|
|
switch (site.UserModel ?? UserModel.Standard)
|
|
|
{
|
|
|
case UserModel.Check:
|
|
|
userM = "自主选择";
|
|
|
break;
|
|
|
case UserModel.Checked:
|
|
|
userM = "自动检测";
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
ui.NewSection()
|
|
|
.AddCell("功能启用", userM, new UIClick( request, g, "UserModel"))
|
|
|
.AddCell("检测账户", String.IsNullOrEmpty(site.Account) ? "未设置" : site.Account, new UIClick(request.Model, "Site","Key", site.Root, "Model", "Account"))
|
|
|
.AddCell("检测登录", value.ContainsKey("IsNotLoginApi") ? "不是" : "是", new UIClick( request, g, "IsNotLoginApi"));
|
|
|
|
|
|
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
ui.NewSection().AddCell("内容转化配置", new UIClick( request, g, "Script"));
|
|
|
|
|
|
|
|
|
ui.NewSection().AddCell("记住选择内容", value.ContainsKey("RememberValue") ? "记住" : "不记住", new UIClick( request, g, "RememberValue"));
|
|
|
|
|
|
var defautValue = value["DefautValue"] as string;
|
|
|
ui.NewSection().AddCell("内容默认值", String.IsNullOrEmpty(defautValue) ? "未设置" : "已设置", new UIClick( request, g, "DefautValue"));
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ui.SendTo(this.Context, "Mime.Config");
|
|
|
});
|
|
|
switch (Model)
|
|
|
{
|
|
|
case "UserModel":
|
|
|
if (Check(value))
|
|
|
{
|
|
|
var root = Key.Substring(0, Key.LastIndexOf('_'));
|
|
|
var site = DataFactory.Instance().Site(root.ToLower());
|
|
|
if (site != null)
|
|
|
{
|
|
|
if (String.IsNullOrEmpty(site.Account))
|
|
|
{
|
|
|
this.Prompt("未设置检测账户或密码");
|
|
|
}
|
|
|
var tValue = this.AsyncDialog(Model, g =>
|
|
|
{
|
|
|
var sheet = new UMC.Web.UISheetDialog() { Title = "账户检测功能" };
|
|
|
sheet.Put("启用自动检测", "Checked");
|
|
|
sheet.Put("启用自主选择", "Check");
|
|
|
sheet.Put("关闭账户检测", "Standard");
|
|
|
return sheet;
|
|
|
});
|
|
|
var userM = UMC.Data.Utility.Parse(tValue, UserModel.Standard);
|
|
|
|
|
|
DataFactory.Instance().Put(new Site
|
|
|
{
|
|
|
Root = site.Root,
|
|
|
UserModel = userM
|
|
|
});
|
|
|
|
|
|
this.Context.Send("Mime.Config", true);
|
|
|
}
|
|
|
|
|
|
}
|
|
|
this.Context.End();
|
|
|
break;
|
|
|
case "UnDomain":
|
|
|
this.AsyncDialog("Confirm", g => new UIConfirmDialog("您确认移除此跨域网址吗"));
|
|
|
value.Remove("Domain");
|
|
|
break;
|
|
|
case "Feilds":
|
|
|
var t = this.AsyncDialog(Model, g =>
|
|
|
{
|
|
|
|
|
|
var from4 = new UIFormDialog() { Title = "新增扩展字段" };
|
|
|
from4.AddText("字段标题", "Value", "");
|
|
|
from4.AddText("字段标识", "Name", "");
|
|
|
from4.Submit("确认", "Mime.Config");
|
|
|
from4.AddFooter("当标识为“LoginAfter”,表示登录之后请求的网络配置");
|
|
|
return from4;
|
|
|
});
|
|
|
var feilds = value["Feilds"] as Hashtable ?? new Hashtable();
|
|
|
feilds[t["Name"]] = t["Value"];
|
|
|
value["Feilds"] = feilds;
|
|
|
break;
|
|
|
|
|
|
case "RememberValue":
|
|
|
if (value.ContainsKey("RememberValue"))
|
|
|
{
|
|
|
value.Remove("RememberValue");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
value["RememberValue"] = "YES";
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
var sValue = this.AsyncDialog(Model, g =>
|
|
|
{
|
|
|
switch (Model)
|
|
|
{
|
|
|
case "ContentType":
|
|
|
|
|
|
var sheet = new UMC.Web.UISheetDialog() { Title = "提交方式" };
|
|
|
sheet.Put("表单格式", "application/x-www-form-urlencoded");
|
|
|
sheet.Put("JSON格式", "application/json");
|
|
|
sheet.Put("XML格式", "application/xml");
|
|
|
return sheet;
|
|
|
|
|
|
|
|
|
case "Method":
|
|
|
|
|
|
var sheet2 = new UMC.Web.UISheetDialog() { Title = "提交方式" };
|
|
|
sheet2.Put("GET").Put("POST").Put("PUT");// "application/json");
|
|
|
return sheet2;
|
|
|
|
|
|
|
|
|
case "Domain":
|
|
|
var fromDomain = new UIFormDialog() { Title = "跨域网址" };
|
|
|
fromDomain.AddText("跨域网址", "Domain", value["Domain"] as string);
|
|
|
fromDomain.Submit("确认", "Mime.Config");
|
|
|
return fromDomain;
|
|
|
case "RawUrl":
|
|
|
var from = new UIFormDialog() { Title = "提交路径" };
|
|
|
from.AddText("提交路径", "RawUrl", value["RawUrl"] as string);
|
|
|
from.Submit("确认", "Mime.Config");
|
|
|
return from;
|
|
|
case "Script":
|
|
|
var from5 = new UIFormDialog() { Title = "内容转化" };
|
|
|
from5.AddTextarea("脚本或者标识", "Script", value["Script"] as string).Put("Rows", 20);
|
|
|
from5.AddFooter("可配置内容表单name、属性key或者js脚本");
|
|
|
from5.Submit("确认", "Mime.Config");
|
|
|
return from5;
|
|
|
case "Header":
|
|
|
var from6 = new UIFormDialog() { Title = "Header字典对" };
|
|
|
from6.AddTextarea("字典对", "Header", value["Header"] as string).Put("Rows", 20).PlaceHolder("H:V");
|
|
|
|
|
|
from6.Submit("确认", "Mime.Config");
|
|
|
return from6;
|
|
|
|
|
|
|
|
|
case "Content":
|
|
|
|
|
|
var from2 = new UIFormDialog() { Title = "提交内容" };
|
|
|
if (String.Equals(value["Method"] as string, "GET"))
|
|
|
{
|
|
|
from2.Title = "脚本网址";
|
|
|
from2.AddTextarea("脚本网址", "Content", value["Content"] as string).Put("Rows", 10).NotRequired();
|
|
|
|
|
|
from2.AddFooter("多项用换行、空格或逗号符分割");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
from2.AddTextarea("内容格式", "Content", value["Content"] as string).Put("Rows", 20).NotRequired();
|
|
|
|
|
|
}
|
|
|
from2.Submit("确认", "Mime.Config");
|
|
|
return from2;
|
|
|
|
|
|
|
|
|
|
|
|
case "UpdateModel":
|
|
|
if (SiteConfig.CheckMime(value) == false)
|
|
|
{
|
|
|
this.Prompt("请完成托管密码配置,再来设置此属性");
|
|
|
}
|
|
|
var from9 = new UIFormDialog() { Title = "密码托管模式" };
|
|
|
|
|
|
var UpdateModel = value["UpdateModel"] as String;
|
|
|
from9.AddRadio("", "UpdateModel").Put("默认不选中", "Select", String.Equals(UpdateModel, "Select"))
|
|
|
.Put("默认选中", "Selected", String.Equals(UpdateModel, "Selected")).Put("强制托管", "Compel", String.Equals(UpdateModel, "Compel")).Put("禁用托管", "Disable", String.Equals(UpdateModel, "Disable"));
|
|
|
|
|
|
|
|
|
from9.Submit("确认", "Mime.Config");
|
|
|
return from9;
|
|
|
|
|
|
|
|
|
case "DefautValue":
|
|
|
|
|
|
var from8 = new UIFormDialog() { Title = "内容默认值" };
|
|
|
|
|
|
from8.AddText("默认值", "DefautValue", value["DefautValue"] as string).Put("Rows", 20);
|
|
|
|
|
|
|
|
|
from8.Submit("确认", "Mime.Config");
|
|
|
return from8;
|
|
|
case "Callback":
|
|
|
|
|
|
var fromCallback = new UIFormDialog() { Title = "跳转参数" };
|
|
|
|
|
|
fromCallback.AddText("跳转参数", "Callback", value["Callback"] as string).Put("Rows", 20);
|
|
|
|
|
|
|
|
|
fromCallback.Submit("确认", "Mime.Config");
|
|
|
return fromCallback;
|
|
|
case "IsLoginHTML":
|
|
|
return this.DialogValue(value.ContainsKey("IsLoginHTML") ? "none" : "true");
|
|
|
case "IsNotCookieClear":
|
|
|
return this.DialogValue(value.ContainsKey("IsNotCookieClear") ? "none" : "true");
|
|
|
|
|
|
case "IsNotLoginApi":
|
|
|
return this.DialogValue(value.ContainsKey("IsNotLoginApi") ? "none" : "true");
|
|
|
|
|
|
|
|
|
case "Finish":
|
|
|
var from3 = new UIFormDialog() { Title = "检测格式" };
|
|
|
var fh = (value["Finish"] as string) ?? "";
|
|
|
var isBody = true;
|
|
|
var fhv = fh;
|
|
|
if (String.IsNullOrEmpty(fh) == false)
|
|
|
{
|
|
|
if (fh.StartsWith("E:") || fh.StartsWith("HE:") || fh.StartsWith("H:"))
|
|
|
{
|
|
|
isBody = false;
|
|
|
fhv = fh.Substring(fh.IndexOf(':') + 1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
from3.AddRadio("检测模式", "Format").Put("成功正文", "B", isBody)
|
|
|
.Put("失败正文", "E", fh.StartsWith("E:")).Put("成功表头", "H", fh.StartsWith("H:")).Put("失败表头", "HE", fh.StartsWith("HE:"));
|
|
|
|
|
|
from3.AddFooter("当模式为成功正文时,内容是“Url”时,表示检测是否重定向");
|
|
|
|
|
|
from3.AddText("检测内容", "Finish", fhv);
|
|
|
from3.Submit("确认", "Mime.Config");
|
|
|
return from3;
|
|
|
default:
|
|
|
var feilds4 = value["Feilds"] as Hashtable;
|
|
|
if (feilds4 != null && feilds4.Count > 0)
|
|
|
{
|
|
|
feilds4.Remove(Model);
|
|
|
}
|
|
|
|
|
|
return this.DialogValue("none");
|
|
|
|
|
|
}
|
|
|
});
|
|
|
|
|
|
if (String.Equals(sValue, "none") == false)
|
|
|
{
|
|
|
switch (Model)
|
|
|
{
|
|
|
case "Domain":
|
|
|
|
|
|
try
|
|
|
{
|
|
|
var Domain = new Uri(sValue);
|
|
|
|
|
|
sValue = new Uri(Domain, "/").AbsoluteUri;
|
|
|
}
|
|
|
catch
|
|
|
{
|
|
|
|
|
|
this.Prompt("跨域格式不正确");
|
|
|
}
|
|
|
break;
|
|
|
case "RawUrl":
|
|
|
if (sValue.StartsWith("/") == false || sValue.StartsWith("//"))
|
|
|
{
|
|
|
this.Prompt("提交路径格式错误,请确认");
|
|
|
}
|
|
|
break;
|
|
|
case "Finish":
|
|
|
if (request.SendValues != null)
|
|
|
{
|
|
|
var fFormat = request.SendValues["Format"];
|
|
|
switch (fFormat)
|
|
|
{
|
|
|
case "E":
|
|
|
case "H":
|
|
|
case "HE":
|
|
|
sValue = fFormat + ":" + sValue;
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
value[Model] = sValue;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
value.Remove(Model);
|
|
|
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
Config platformConfig = new Config();
|
|
|
platformConfig.ConfKey = mainKey;
|
|
|
platformConfig.ConfValue = UMC.Data.JSON.Serialize(value);
|
|
|
UMC.Data.DataFactory.Instance().Put(platformConfig);
|
|
|
this.Context.Send("Mime.Config", true);
|
|
|
|
|
|
}
|
|
|
}
|
|
|
} |