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

226 lines
9.4 KiB
C#

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;
using UMC.Net;
using UMC.Data;
using System.Collections.Specialized;
namespace UMC.ITME.Activities
{
/// <summary>
/// 邮箱账户
/// </summary>
[UMC.Web.Apiumc("Proxy", "UMC", Auth = WebAuthType.Admin)]
class SiteUMCActivity : WebActivity
{
public override void ProcessActivity(WebRequest request, WebResponse response)
{
var root = this.AsyncDialog("Root", r => this.Prompt("请传入站点"));
var site = DataFactory.Instance().SiteConfig(root);
var cfg = Reflection.Configuration("UMC");
var nameKey = this.AsyncDialog("Key", r =>
{
if (site.Site.UserModel != UserModel.Bridge)
{
this.Prompt("云模块需要桥接身份模式");
}
var ui = UISection.Create(new UITitle($"轻应用云模块"));
ui.AddCell("所属应用", site.Caption);
var ds = JSON.Deserialize(new Uri(site.Domains[0] + "/UMC/System/Setup/Mapping").WebRequest().Get().ReadAsString()) as Hashtable;
var hash = new Dictionary<String, bool>();
if (ds?.ContainsKey("data") == true)
{
var data = ds["data"] as Array;
var ui2 = ui.NewSection();
ui2.Header.Put("text", $"{site.Caption}的云模块");
foreach (var o in data)
{
var dic = o as Hashtable;
if (dic.ContainsKey("model"))
{
var model = dic["model"] as string;
String key = "";
if (dic.ContainsKey("cmd"))
{
var cmd = dic["cmd"];
key = $"{model}.{cmd}";
}
else
{
key = $"{model}.*";
}
hash[key] = true;
var click = UIClick.Click(new UIClick(request, r, key));
var p = cfg[key];
if (p != null)
{
if (String.Equals(p.Attributes["root"], site.Root))
{
var cell = UICell.UI('\uea07', key, dic["desc"] as string, click);
var item = cell.Data as WebMeta;
item.Put("Color", "#09bb07");
// cell.Style.Name("Icon").Color(0x09bb07);
ui2.Add(cell);
}
else
{
ui2.Add(UICell.UI('\uea07', key, dic["desc"] as string, click));
}
}
else
{
ui2.Add(UICell.UI('\uea01', key, dic["desc"] as string, click));
}
}
}
}
var u2 = ui.NewSection();
u2.Header.Put("text", "云模块");
foreach (var p in cfg.Providers)
{
var croot = p.Attributes["root"];
if (String.Equals(croot, site.Root) == false)
{
if (hash.ContainsKey(p.Name) == false)
{
u2.AddCell(p.Name, croot, new UIClick(request.Model, request.Command, croot));
}
}
else if (hash.ContainsKey(p.Name) == false)
{
u2.AddCell(p.Name, croot, new UIClick("System", "Web", p.Name));
}
}
if (u2.Length == 0)
{
u2.Add("Desc", new UMC.Web.WebMeta().Put("desc", "未有其他应用云模块").Put("icon", "\uF016"), new UMC.Web.WebMeta().Put("desc", "{icon}\n{desc}"),
new UIStyle().Align(1).Color(0xaaa).Padding(20, 20).BgColor(0xfff).Size(12).Name("icon", new UIStyle().Font("wdk").Size(60)));
}
ui.UIFootBar = new UIFootBar() { IsFixed = true };
ui.UIFootBar.AddText(new UIEventText("配置云模块").Click(new UIClick(request, r, "New")),
new UIEventText("检测配置").Click(new UIClick(request, r, "Check")).Style(new UIStyle().BgColor()));
ui.SendTo(this.Context, true, "System.Web", $"{request.Model}.{request.Command}");
});
switch (nameKey)
{
case "Check":
var ns = new NameValueCollection();
var time = Utility.TimeSpan();
var webItem = new WebMeta();
webItem.Put("time", time);
webItem.Put("appId", time);
ns.Add("appId", site.Root);
ns.Add("time", time.ToString());
webItem.Put("sign", Data.Utility.Sign(ns, site.Site.AppSecret));
var ls = JSON.Deserialize<WebMeta>(new Uri(site.Domains[0] + "/UMC.Conf").WebRequest().Put(webItem).ReadAsString());
switch (ls["code"] ?? "")
{
case "success":
this.Prompt("云模板效验通过");
break;
case "error":
this.Prompt("错误", "验证不通过");
break;
case "unactivated":
var conf = JSON.Deserialize<WebMeta>(new Uri(site.Domains[0] + "/UMC.Conf").WebRequest().Put(new WebMeta().Put("authSecret", site.Site.AppSecret).Put("domain", $"{site.Root}.{Web.WebResource.Instance().WebDomain()}")).ReadAsString());
if (String.Equals(conf?["code"], "success"))
{
this.Prompt("同步成功");
}
break;
default:
this.Prompt("提示", "请确认云模块是否正常开启");
break;
}
return;
case "New":
var Settings = this.AsyncDialog("Settings", g =>
{
var fm = new UIFormDialog() { Title = "配置云模块" };
fm.AddText("模块名", "model", String.Empty);
fm.AddText("指令名", "cmd", String.Empty);
fm.AddText("描述", "desc", String.Empty);
fm.Submit("确认", $"{request.Model}.{request.Command}");
return fm;
});
nameKey = $"{Settings["model"]}.{Settings["cmd"]}";
var p2 = Data.Provider.Create(nameKey, "UMC");
p2.Attributes.Add("root", site.Root);
p2.Attributes.Add("desc", Settings["desc"]);
cfg.Add(p2);
Reflection.Configuration("UMC", cfg);
this.Context.Send(true);
break;
}
var item = new WebMeta();
item.Put("Color", "#111");
var p = cfg[nameKey];
if (p != null)
{
if (p.Attributes["root"] != root)
{
this.AsyncDialog("Confirm", r => new UIConfirmDialog("当前云模板并不是当前应用,你要替换嘛"));
item.Put("Icon", "\uea07").Put("Color", "#09bb07");
p.Attributes["root"] = root;
}
else
{
item.Put("Icon", "\uea01");
cfg.Remove(nameKey);
}
}
else
{
var provider = Provider.Create(nameKey, "UMC");
provider.Attributes["root"] = root;
cfg.Add(provider);
item.Put("Icon", "\uea07").Put("Color", "#09bb07");
// cell.Style.Name("Icon").Color(0x09bb07);
}
Reflection.Configuration("UMC", cfg);
var ui = this.AsyncDialog("UI", g => this.DialogValue("none"));
var section = this.AsyncDialog("section", g => this.DialogValue("1"));
var row = this.AsyncDialog("row", g => this.DialogValue("1"));
var editer = new Web.UISection.Editer(section, row);
editer.Value(item);
editer.Builder(this.Context, ui, true);
// switch(k)
// }
}
}
}