mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-26 01:04:06 +08:00
mac opt ctx.right
This commit is contained in:
parent
fadba3ea48
commit
39bb3e0583
@ -1,4 +1,4 @@
|
||||
return
|
||||
login root root
|
||||
|
||||
source etc/local.shy
|
||||
|
||||
|
@ -214,6 +214,7 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
|
||||
if int64(msg.Capi("expire")) > time.Now().Unix() {
|
||||
m.Echo(msg.Cap("username"))
|
||||
m.Copy(msg, "target")
|
||||
m.Sess("aaa", msg)
|
||||
} else {
|
||||
delete(aaa.sessions, arg[0])
|
||||
msg.Target().Close(msg)
|
||||
|
@ -211,12 +211,15 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
||||
Name: "source filename [async [cli_name [cli_help]]",
|
||||
Help: "解析脚本, filename: 文件名, async: 异步执行, cli_name: 模块名, cli_help: 模块帮助",
|
||||
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||
if _, ok := m.Target().Server.(*CLI); m.Assert(ok) { // {{{
|
||||
m.Start(m.Confx("cli_name", arg, 2), m.Confx("cli_help", arg, 3), key, arg[0])
|
||||
if len(arg) < 2 || arg[1] != "async" {
|
||||
m.Wait()
|
||||
}
|
||||
} // }}}
|
||||
if _, ok := m.Source().Server.(*CLI); ok {
|
||||
msg := m.Spawn(c)
|
||||
m.Copy(msg, "target")
|
||||
}
|
||||
|
||||
m.Start(m.Confx("cli_name", arg, 2), m.Confx("cli_help", arg, 3), key, arg[0])
|
||||
if len(arg) < 2 || arg[1] != "async" {
|
||||
m.Wait()
|
||||
}
|
||||
}},
|
||||
"label": &ctx.Command{Name: "label name", Help: "记录当前脚本的位置, name: 位置名", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||
if cli, ok := m.Target().Server.(*CLI); m.Assert(ok) { // {{{
|
||||
@ -766,6 +769,9 @@ var Index = &ctx.Context{Name: "cli", Help: "管理中心",
|
||||
m.Log("fuck", strings.Repeat("\n", 20))
|
||||
}},
|
||||
},
|
||||
Index: map[string]*ctx.Context{
|
||||
"void": &ctx.Context{Caches: map[string]*ctx.Cache{"nshell": &ctx.Cache{}}},
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
@ -2673,279 +2673,188 @@ var Index = &Context{Name: "ctx", Help: "模块中心",
|
||||
"right": &Command{
|
||||
Name: "right [share|add|del group [cache|config|command item]]",
|
||||
Help: "用户组管理,查看、添加、删除用户组或是接口",
|
||||
Form: map[string]int{"check": 0, "add": 0, "del": 0, "brow": 0, "cache": 0, "config": 0, "command": 0},
|
||||
Hand: func(m *Message, c *Context, key string, arg ...string) {
|
||||
index := m.target.Index
|
||||
index := m.target.Index // {{{
|
||||
if index == nil {
|
||||
m.target.Index = map[string]*Context{}
|
||||
index = m.target.Index
|
||||
index = map[string]*Context{}
|
||||
m.target.Index = index
|
||||
}
|
||||
|
||||
current := m.target
|
||||
owner := m.target
|
||||
aaa := m.Sess("aaa", false)
|
||||
if aaa.Cap("username") != aaa.Conf("rootname") {
|
||||
current = index[aaa.Cap("username")]
|
||||
owner = index[aaa.Cap("username")]
|
||||
m.Assert(owner != nil)
|
||||
}
|
||||
|
||||
share := owner
|
||||
if len(arg) > 0 {
|
||||
if owner.Index == nil {
|
||||
owner.Index = map[string]*Context{}
|
||||
}
|
||||
if s, ok := owner.Index[arg[0]]; ok {
|
||||
share = s
|
||||
} else {
|
||||
share = &Context{Name: arg[0], context: owner}
|
||||
if _, ok = index[arg[0]]; m.Assert(!ok) {
|
||||
owner.Index[arg[0]] = share
|
||||
index[arg[0]] = share
|
||||
}
|
||||
}
|
||||
arg = arg[1:]
|
||||
}
|
||||
m.Echo("username:%s\n", aaa.Cap("username"))
|
||||
|
||||
if len(arg) == 0 {
|
||||
if current != nil {
|
||||
for k, x := range current.Caches {
|
||||
m.Add("append", "ccc", "cache")
|
||||
m.Add("append", "key", k)
|
||||
m.Add("append", "name", x.Name)
|
||||
}
|
||||
for k, x := range current.Configs {
|
||||
m.Add("append", "ccc", "config")
|
||||
m.Add("append", "key", k)
|
||||
m.Add("append", "name", x.Name)
|
||||
}
|
||||
for k, x := range current.Commands {
|
||||
m.Add("append", "ccc", "command")
|
||||
m.Add("append", "key", k)
|
||||
m.Add("append", "name", x.Name)
|
||||
}
|
||||
for k, x := range current.Index {
|
||||
m.Add("append", "ccc", "context")
|
||||
m.Add("append", "key", k)
|
||||
m.Add("append", "name", x.Name)
|
||||
}
|
||||
m.Table()
|
||||
for k, x := range share.Caches {
|
||||
m.Add("append", "ccc", "cache")
|
||||
m.Add("append", "key", k)
|
||||
m.Add("append", "name", x.Name)
|
||||
m.Add("append", "arg", "")
|
||||
m.Add("append", "value", "")
|
||||
}
|
||||
for k, x := range share.Configs {
|
||||
m.Add("append", "ccc", "config")
|
||||
m.Add("append", "key", k)
|
||||
m.Add("append", "name", x.Name)
|
||||
m.Add("append", "arg", "")
|
||||
m.Add("append", "value", "")
|
||||
}
|
||||
for k, x := range share.Commands {
|
||||
m.Add("append", "ccc", "command")
|
||||
m.Add("append", "key", k)
|
||||
m.Add("append", "name", x.Name)
|
||||
|
||||
m.Add("append", "arg", "")
|
||||
m.Add("append", "value", "")
|
||||
for a, val := range x.Shares {
|
||||
for _, v := range val {
|
||||
m.Add("append", "ccc", "command")
|
||||
m.Add("append", "key", k)
|
||||
m.Add("append", "name", x.Name)
|
||||
|
||||
m.Add("append", "arg", a)
|
||||
m.Add("append", "value", v)
|
||||
}
|
||||
}
|
||||
}
|
||||
for k, x := range share.Index {
|
||||
m.Add("append", "ccc", "context")
|
||||
m.Add("append", "key", k)
|
||||
m.Add("append", "name", x.Name)
|
||||
m.Add("append", "arg", x.context.Name)
|
||||
m.Add("append", "value", "")
|
||||
}
|
||||
m.Table()
|
||||
return
|
||||
}
|
||||
|
||||
void := index["void"]
|
||||
|
||||
switch arg[0] {
|
||||
case "show":
|
||||
case "add":
|
||||
case "del":
|
||||
}
|
||||
return
|
||||
// {{{
|
||||
|
||||
if aaa != nil && aaa.Cap("username") != aaa.Conf("rootname") {
|
||||
if current = index[aaa.Cap("username")]; current == nil {
|
||||
if void != nil {
|
||||
m.Echo("%s:caches\n", void.Name)
|
||||
for k, c := range void.Caches {
|
||||
m.Echo(" %s: %s\n", k, c.Value)
|
||||
}
|
||||
m.Echo("%s:configs\n", void.Name)
|
||||
for k, c := range void.Configs {
|
||||
m.Echo(" %s: %s\n", k, c.Value)
|
||||
}
|
||||
m.Echo("%s:commands\n", void.Name)
|
||||
for k, c := range void.Commands {
|
||||
m.Echo(" %s: %s\n", k, c.Name)
|
||||
}
|
||||
m.Echo("%s:contexts\n", void.Name)
|
||||
for k, c := range void.Index {
|
||||
m.Echo(" %s: %s\n", k, c.Name)
|
||||
}
|
||||
}
|
||||
return
|
||||
case "check":
|
||||
if len(arg) == 1 {
|
||||
m.Echo("ok")
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
group := current
|
||||
if len(arg) > 0 {
|
||||
group = current.Index[arg[0]]
|
||||
}
|
||||
|
||||
item := ""
|
||||
if len(arg) > 1 {
|
||||
item = arg[1]
|
||||
}
|
||||
|
||||
switch {
|
||||
case m.Has("check"):
|
||||
if group != nil {
|
||||
switch {
|
||||
case m.Has("cache"):
|
||||
if _, ok := group.Caches[item]; ok {
|
||||
switch arg[1] {
|
||||
case "cache":
|
||||
if _, ok := share.Caches[arg[2]]; ok {
|
||||
m.Echo("ok")
|
||||
return
|
||||
}
|
||||
case "config":
|
||||
if _, ok := share.Configs[arg[2]]; ok {
|
||||
m.Echo("ok")
|
||||
return
|
||||
}
|
||||
case "command":
|
||||
if x, ok := share.Commands[arg[2]]; ok {
|
||||
if len(arg) == 3 {
|
||||
m.Echo("ok")
|
||||
return
|
||||
break
|
||||
}
|
||||
case m.Has("config"):
|
||||
if _, ok := group.Configs[item]; ok {
|
||||
m.Echo("ok")
|
||||
return
|
||||
}
|
||||
case m.Has("command"):
|
||||
|
||||
if len(arg) > 1 {
|
||||
if _, ok := group.Commands[item]; !ok {
|
||||
m.Echo("no")
|
||||
return
|
||||
}
|
||||
}
|
||||
if len(arg) > 2 {
|
||||
if _, ok := group.Commands[item].Shares[arg[2]]; !ok {
|
||||
m.Echo("no")
|
||||
return
|
||||
}
|
||||
}
|
||||
if len(arg) > 3 {
|
||||
for _, v := range group.Commands[item].Shares[arg[2]] {
|
||||
match, e := regexp.MatchString(v, arg[3])
|
||||
m.Assert(e)
|
||||
if match {
|
||||
m.Echo("ok")
|
||||
for i := 3; i < len(arg)-1; i += 2 {
|
||||
if len(x.Shares[arg[i]]) > 0 {
|
||||
match := false
|
||||
for _, v := range x.Shares[arg[i]] {
|
||||
ma, e := regexp.MatchString(v, arg[i+1])
|
||||
m.Assert(e)
|
||||
if ma {
|
||||
match = ma
|
||||
break
|
||||
}
|
||||
}
|
||||
if !match {
|
||||
m.Echo("no")
|
||||
return
|
||||
}
|
||||
}
|
||||
m.Echo("no")
|
||||
return
|
||||
}
|
||||
m.Echo("ok")
|
||||
return
|
||||
default:
|
||||
m.Echo("ok")
|
||||
return
|
||||
}
|
||||
}
|
||||
m.Echo("no")
|
||||
return
|
||||
case m.Has("add"):
|
||||
if group == nil {
|
||||
if _, ok := index[arg[0]]; ok {
|
||||
break
|
||||
case "add":
|
||||
switch arg[1] {
|
||||
case "cache":
|
||||
if x, ok := owner.Caches[arg[2]]; ok {
|
||||
if share.Caches == nil {
|
||||
share.Caches = map[string]*Cache{}
|
||||
}
|
||||
share.Caches[arg[2]] = x
|
||||
m.Log("info", "%s.cache(%s)->%s", owner.Name, arg[2], share.Name)
|
||||
}
|
||||
group = &Context{Name: arg[0]}
|
||||
}
|
||||
|
||||
switch {
|
||||
case m.Has("cache"):
|
||||
if x, ok := current.Caches[item]; ok {
|
||||
if group.Caches == nil {
|
||||
group.Caches = map[string]*Cache{}
|
||||
case "config":
|
||||
if x, ok := owner.Configs[arg[2]]; ok {
|
||||
if share.Configs == nil {
|
||||
share.Configs = map[string]*Config{}
|
||||
}
|
||||
group.Caches[item] = x
|
||||
share.Configs[arg[2]] = x
|
||||
}
|
||||
case m.Has("config"):
|
||||
if x, ok := current.Configs[item]; ok {
|
||||
if group.Configs == nil {
|
||||
group.Configs = map[string]*Config{}
|
||||
m.Log("info", "%s.config(%s)->%s", owner.Name, arg[2], share.Name)
|
||||
case "command":
|
||||
if _, ok := owner.Commands[arg[2]]; ok {
|
||||
if share.Commands == nil {
|
||||
share.Commands = map[string]*Command{}
|
||||
}
|
||||
group.Configs[item] = x
|
||||
}
|
||||
case m.Has("command"):
|
||||
if _, ok := current.Commands[item]; ok {
|
||||
if group.Commands == nil {
|
||||
group.Commands = map[string]*Command{}
|
||||
if _, ok := share.Commands[arg[2]]; !ok {
|
||||
share.Commands[arg[2]] = &Command{Shares: map[string][]string{}}
|
||||
}
|
||||
|
||||
command, ok := group.Commands[item]
|
||||
if !ok {
|
||||
command = &Command{Shares: map[string][]string{}}
|
||||
group.Commands[item] = command
|
||||
m.Log("info", "%s.command(%s)->%s", owner.Name, arg[2], share.Name)
|
||||
for i := 3; i < len(arg)-1; i += 2 {
|
||||
m.Log("info", "%s.command(%s, %s, %s)->%s", owner.Name, arg[2], arg[i], arg[i+1], share.Name)
|
||||
share.Commands[arg[2]].Shares[arg[i]] = append(share.Commands[arg[2]].Shares[arg[i]], arg[i+1])
|
||||
}
|
||||
|
||||
for i := 2; i < len(arg)-1; i += 2 {
|
||||
command.Shares[arg[i]] = append(command.Shares[arg[i]], arg[i+1])
|
||||
}
|
||||
|
||||
// group.Commands[item] = x
|
||||
}
|
||||
}
|
||||
|
||||
if current.Index == nil {
|
||||
current.Index = map[string]*Context{}
|
||||
}
|
||||
current.Index[arg[0]] = group
|
||||
index[arg[0]] = group
|
||||
|
||||
case m.Has("del"):
|
||||
if group == nil {
|
||||
break
|
||||
}
|
||||
|
||||
gs := []*Context{group}
|
||||
for i := 0; i < len(gs); i++ {
|
||||
for _, g := range gs[i].Index {
|
||||
gs = append(gs, g)
|
||||
case "del":
|
||||
switch arg[1] {
|
||||
case "cache":
|
||||
cs := []*Context{share}
|
||||
for i := 0; i < len(cs); i++ {
|
||||
for _, x := range cs[i].Index {
|
||||
cs = append(cs, x)
|
||||
}
|
||||
delete(cs[i].Caches, arg[2])
|
||||
}
|
||||
|
||||
switch {
|
||||
case m.Has("cache"):
|
||||
delete(gs[i].Caches, item)
|
||||
case m.Has("config"):
|
||||
delete(gs[i].Configs, item)
|
||||
case m.Has("command"):
|
||||
if gs[i].Commands == nil {
|
||||
break
|
||||
case "config":
|
||||
cs := []*Context{share}
|
||||
for i := 0; i < len(cs); i++ {
|
||||
for _, x := range cs[i].Index {
|
||||
cs = append(cs, x)
|
||||
}
|
||||
if len(arg) == 2 {
|
||||
delete(gs[i].Commands, item)
|
||||
break
|
||||
}
|
||||
|
||||
if gs[i].Commands[item] == nil {
|
||||
break
|
||||
}
|
||||
shares := gs[i].Commands[item].Shares
|
||||
if shares == nil {
|
||||
break
|
||||
delete(cs[i].Configs, arg[2])
|
||||
}
|
||||
case "command":
|
||||
cs := []*Context{share}
|
||||
for i := 0; i < len(cs); i++ {
|
||||
for _, x := range cs[i].Index {
|
||||
cs = append(cs, x)
|
||||
}
|
||||
if len(arg) == 3 {
|
||||
delete(shares, arg[2])
|
||||
break
|
||||
delete(cs[i].Commands, arg[2])
|
||||
} else if len(arg) == 4 {
|
||||
delete(cs[i].Commands[arg[2]].Shares, arg[3])
|
||||
}
|
||||
}
|
||||
|
||||
for i := 0; i < len(shares[arg[2]]); i++ {
|
||||
if shares[arg[2]][i] == arg[3] {
|
||||
for ; i < len(shares[arg[2]])-1; i++ {
|
||||
shares[arg[2]][i] = shares[arg[2]][i+1]
|
||||
}
|
||||
shares[arg[2]] = shares[arg[2]][:i]
|
||||
}
|
||||
}
|
||||
gs[i].Commands[item].Shares = shares
|
||||
|
||||
default:
|
||||
delete(index, gs[i].Name)
|
||||
delete(current.Index, gs[i].Name)
|
||||
}
|
||||
}
|
||||
|
||||
default:
|
||||
m.Echo("%s:caches\n", group.Name)
|
||||
if void != nil {
|
||||
for k, c := range void.Caches {
|
||||
m.Echo(" %s: %s\n", k, c.Value)
|
||||
}
|
||||
}
|
||||
for k, c := range group.Caches {
|
||||
m.Echo(" %s: %s\n", k, c.Value)
|
||||
}
|
||||
m.Echo("%s:configs\n", group.Name)
|
||||
if void != nil {
|
||||
for k, c := range void.Configs {
|
||||
m.Echo(" %s: %s\n", k, c.Value)
|
||||
}
|
||||
}
|
||||
for k, c := range group.Configs {
|
||||
m.Echo(" %s: %s\n", k, c.Value)
|
||||
}
|
||||
m.Echo("%s:commands\n", group.Name)
|
||||
if void != nil {
|
||||
for k, c := range void.Commands {
|
||||
m.Echo(" %s: %s\n", k, c.Name)
|
||||
}
|
||||
}
|
||||
for k, c := range group.Commands {
|
||||
m.Echo(" %s: %s %v\n", k, c.Name, c.Shares)
|
||||
}
|
||||
m.Echo("%s:contexts\n", group.Name)
|
||||
if void != nil {
|
||||
for k, c := range void.Index {
|
||||
m.Echo(" %s: %s\n", k, c.Name)
|
||||
}
|
||||
}
|
||||
for k, c := range group.Index {
|
||||
m.Echo(" %s: %s\n", k, c.Name)
|
||||
}
|
||||
} // }}}
|
||||
}},
|
||||
|
@ -643,42 +643,46 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
||||
if !m.Options("dir") {
|
||||
m.Option("dir", m.Cap("directory"))
|
||||
}
|
||||
|
||||
check := m.Spawn().Cmd("/share", "/upload", "dir", m.Option("dir"))
|
||||
if !check.Results(0) {
|
||||
m.Copy(check, "append")
|
||||
return
|
||||
}
|
||||
aaa := check.Appendv("aaa").(*ctx.Message)
|
||||
|
||||
// 输出文件
|
||||
s, e := os.Stat(m.Option("dir"))
|
||||
if m.Assert(e); !s.IsDir() {
|
||||
http.ServeFile(w, r, m.Option("dir"))
|
||||
return
|
||||
}
|
||||
|
||||
if false {
|
||||
|
||||
check := m.Spawn().Cmd("/share", "/upload", "dir", m.Option("dir"))
|
||||
if !check.Results(0) {
|
||||
m.Copy(check, "append")
|
||||
return
|
||||
}
|
||||
aaa := check.Appendv("aaa").(*ctx.Message)
|
||||
|
||||
// 共享列表
|
||||
share := m.Sess("share", m.Target())
|
||||
index := share.Target().Index
|
||||
if index != nil && index[aaa.Append("username")] != nil {
|
||||
for k, v := range index[aaa.Append("username")].Index {
|
||||
for _, j := range v.Commands {
|
||||
for _, n := range j.Shares {
|
||||
for _, nn := range n {
|
||||
if match, e := regexp.MatchString(nn, m.Option("dir")); m.Assert(e) && match {
|
||||
share.Add("append", "group", k)
|
||||
share.Add("append", "value", nn)
|
||||
share.Add("append", "delete", "delete")
|
||||
}
|
||||
// 共享列表
|
||||
share := m.Sess("share", m.Target())
|
||||
index := share.Target().Index
|
||||
m.Log("fuck", "%v", share.Target().Index)
|
||||
m.Log("fuck", "%v", aaa.Format())
|
||||
if index != nil && index[aaa.Cap("username")] != nil {
|
||||
for k, v := range index[aaa.Cap("username")].Index {
|
||||
m.Log("fuck", "%v", v.Commands)
|
||||
for _, j := range v.Commands {
|
||||
m.Log("fuck", "%v", j.Shares)
|
||||
for _, n := range j.Shares {
|
||||
for _, nn := range n {
|
||||
if match, e := regexp.MatchString(nn, m.Option("dir")); m.Assert(e) && match {
|
||||
share.Add("append", "group", k)
|
||||
share.Add("append", "value", nn)
|
||||
share.Add("append", "delete", "delete")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
share.Sort("value", "string")
|
||||
share.Sort("argument", "string")
|
||||
}
|
||||
share.Sort("value", "string")
|
||||
share.Sort("argument", "string")
|
||||
|
||||
if false {
|
||||
}
|
||||
|
||||
// 输出目录
|
||||
@ -751,8 +755,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
||||
}
|
||||
|
||||
m.Append("title", "upload")
|
||||
// m.Append("tmpl", "userinfo", "share", "list", "git", "upload", "create")
|
||||
m.Append("tmpl", "list", "git", "upload", "create")
|
||||
m.Append("tmpl", "userinfo", "share", "list", "git", "upload", "create")
|
||||
m.Append("template", m.Conf("upload_main"), m.Conf("upload_tmpl"))
|
||||
// }}}
|
||||
}},
|
||||
@ -813,10 +816,10 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
||||
|
||||
msg := check.Appendv("aaa").(*ctx.Message).Spawn(m.Target())
|
||||
if m.Options("shareto") {
|
||||
msg.Cmd("right", "add", m.Option("shareto"), "command", arg[0], arg[1], arg[2])
|
||||
msg.Cmd("right", m.Option("shareto"), "add", "command", arg[0], arg[1], arg[2])
|
||||
}
|
||||
if m.Options("notshareto") {
|
||||
msg.Cmd("right", "del", m.Option("notshareto"), "command", arg[0], arg[1], arg[2])
|
||||
msg.Cmd("right", m.Option("notshareto"), "del", "command", arg[0], arg[1], arg[2])
|
||||
}
|
||||
m.Echo("ok")
|
||||
// }}}
|
||||
@ -825,7 +828,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
||||
w := m.Optionv("response").(http.ResponseWriter) //{{{
|
||||
if login := m.Spawn().Cmd("/login"); login.Has("redirect") {
|
||||
aaa := m.Appendv("aaa").(*ctx.Message)
|
||||
if msg := m.Spawn().Cmd("right", "check", aaa.Cap("username"), arg); msg.Results(0) {
|
||||
if msg := m.Spawn().Cmd("right", aaa.Cap("username"), "check", arg); msg.Results(0) {
|
||||
m.Copy(login, "append").Echo(msg.Result(0))
|
||||
return
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user