mirror of
https://shylinux.com/x/ContextOS
synced 2025-04-26 09:14:06 +08:00
opt aaa
This commit is contained in:
parent
e9e4b4e593
commit
36dec6ca32
@ -5,4 +5,5 @@
|
|||||||
~web
|
~web
|
||||||
serve
|
serve
|
||||||
|
|
||||||
~stdio
|
~aaa
|
||||||
|
user root shy shy
|
||||||
|
@ -33,6 +33,18 @@ type AAA struct {
|
|||||||
*ctx.Context
|
*ctx.Context
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Auto(m *ctx.Message, arg ...string) {
|
||||||
|
msg := m.Spawn().Add("option", "auto_cmd", "").Cmd("auth", arg)
|
||||||
|
msg.Table(func(maps map[string]string, list []string, line int) bool {
|
||||||
|
if line >= 0 {
|
||||||
|
m.Add("append", "value", maps["key"])
|
||||||
|
m.Add("append", "name", fmt.Sprintf("%s: %s", maps["type"], maps["meta"]))
|
||||||
|
m.Add("append", "help", fmt.Sprintf("%s", maps["create_time"]))
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func Password(pwd string) string {
|
func Password(pwd string) string {
|
||||||
bs := md5.Sum([]byte(fmt.Sprintln("password:%s", pwd)))
|
bs := md5.Sum([]byte(fmt.Sprintln("password:%s", pwd)))
|
||||||
return hex.EncodeToString(bs[:])
|
return hex.EncodeToString(bs[:])
|
||||||
@ -450,83 +462,112 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
|
|||||||
}
|
}
|
||||||
return
|
return
|
||||||
}},
|
}},
|
||||||
"role": &ctx.Command{Name: "role [name [[componet] componet [[command] command]]]", Help: "用户角色", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
"role": &ctx.Command{Name: "role [name [[componet] componet [[command] command]]]", Help: "用户角色",
|
||||||
switch len(arg) {
|
Auto: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) bool {
|
||||||
case 0:
|
switch len(arg) {
|
||||||
m.Cmdy("aaa.auth", "ship", "userrole")
|
case 0:
|
||||||
case 1:
|
Auto(m, "ship", "userrole")
|
||||||
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet")
|
|
||||||
case 2:
|
|
||||||
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet", arg[1], "commond")
|
|
||||||
case 3:
|
|
||||||
if arg[1] == "componet" {
|
|
||||||
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet", arg[2])
|
|
||||||
} else {
|
|
||||||
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet", arg[1], "commond", arg[2])
|
|
||||||
}
|
}
|
||||||
case 4:
|
return true
|
||||||
default:
|
},
|
||||||
if arg[1] == "componet" && arg[3] == "command" {
|
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||||
for _, v := range arg[4:] {
|
switch len(arg) {
|
||||||
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet", arg[2], "command", v)
|
case 0:
|
||||||
|
m.Cmdy("aaa.auth", "ship", "userrole")
|
||||||
|
case 1:
|
||||||
|
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet")
|
||||||
|
case 2:
|
||||||
|
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet", arg[1], "commond")
|
||||||
|
case 3:
|
||||||
|
if arg[1] == "componet" {
|
||||||
|
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet", arg[2])
|
||||||
|
} else {
|
||||||
|
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet", arg[1], "commond", arg[2])
|
||||||
}
|
}
|
||||||
}
|
case 4:
|
||||||
}
|
default:
|
||||||
return
|
if arg[1] == "componet" && arg[3] == "command" {
|
||||||
}},
|
for _, v := range arg[4:] {
|
||||||
"user": &ctx.Command{Name: "user [role username password] [username]", Help: "用户认证", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
m.Cmdy("aaa.auth", "ship", "userrole", arg[0], "componet", arg[2], "command", v)
|
||||||
switch len(arg) {
|
|
||||||
case 0:
|
|
||||||
m.Cmdy("aaa.auth", "ship", "username")
|
|
||||||
case 1:
|
|
||||||
m.Cmdy("aaa.auth", "ship", "username", arg[0], "userrole")
|
|
||||||
case 3:
|
|
||||||
if m.Cmds("aaa.auth", "ship", "username", arg[0]) && (arg[1] == "password" || arg[1] == "uuid") {
|
|
||||||
m.Cmdy("aaa.auth", "username", arg[0], arg[1], arg[2])
|
|
||||||
break
|
|
||||||
}
|
|
||||||
fallthrough
|
|
||||||
default:
|
|
||||||
for i := 1; i < len(arg); i += 2 {
|
|
||||||
if m.Cmd("aaa.auth", "ship", "username", arg[i], "userrole", arg[0]); i < len(arg)-1 {
|
|
||||||
m.Cmd("aaa.auth", "ship", "username", arg[i], "password", arg[i+1])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}},
|
|
||||||
"sess": &ctx.Command{Name: "sess [sessid [username]]", Help: "会话管理", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
|
||||||
switch len(arg) {
|
|
||||||
case 0:
|
|
||||||
m.Cmdy("aaa.auth", "ship", "session")
|
|
||||||
case 1:
|
|
||||||
m.Cmdy("aaa.auth", arg[0])
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
switch arg[1] {
|
|
||||||
case "username":
|
|
||||||
m.Cmdy("aaa.auth", arg[0], "ship", "username")
|
|
||||||
case "userrole":
|
|
||||||
for _, user := range m.Cmd("aaa.auth", m.Option("sessid"), "username").Meta["meta"] {
|
|
||||||
for _, role := range m.Cmd("aaa.user", user).Meta["meta"] {
|
|
||||||
m.Add("append", "username", user)
|
|
||||||
m.Add("append", "userrole", role)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
m.Table()
|
}
|
||||||
|
return
|
||||||
|
}},
|
||||||
|
"user": &ctx.Command{Name: "user [role username password] [username]", Help: "用户认证",
|
||||||
|
Auto: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) bool {
|
||||||
|
switch len(arg) {
|
||||||
|
case 0:
|
||||||
|
Auto(m, "ship", "username")
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
},
|
||||||
|
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||||
|
switch len(arg) {
|
||||||
|
case 0:
|
||||||
|
m.Cmdy("aaa.auth", "ship", "username")
|
||||||
|
case 1:
|
||||||
|
m.Cmd("aaa.auth", "ship", "username", arg[0], "userrole").CopyTo(m, "append")
|
||||||
|
case 3:
|
||||||
|
if m.Cmds("aaa.auth", "ship", "username", arg[0]) && (arg[1] == "password" || arg[1] == "uuid") {
|
||||||
|
m.Cmdy("aaa.auth", "username", arg[0], arg[1], arg[2])
|
||||||
|
break
|
||||||
|
}
|
||||||
|
fallthrough
|
||||||
default:
|
default:
|
||||||
m.Cmdy("aaa.auth", arg[0], "ship", "username", arg[1], "userrole")
|
for i := 1; i < len(arg); i += 2 {
|
||||||
|
if m.Cmd("aaa.auth", "ship", "username", arg[i], "userrole", arg[0]); i < len(arg)-1 {
|
||||||
|
m.Cmd("aaa.auth", "ship", "username", arg[i], "password", arg[i+1])
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
case 3:
|
return
|
||||||
case 4:
|
}},
|
||||||
if arg[0] == "create" {
|
"sess": &ctx.Command{Name: "sess [sessid [username]]", Help: "会话管理",
|
||||||
m.Cmdy("aaa.auth", "ship", "session", arg[1], arg[2], arg[3])
|
Auto: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) bool {
|
||||||
break
|
switch len(arg) {
|
||||||
|
case 0:
|
||||||
|
Auto(m, "ship", "session")
|
||||||
|
case 1:
|
||||||
|
m.Auto("username", "username", "查看用户")
|
||||||
|
m.Auto("userrole", "userrole", "查看角色")
|
||||||
}
|
}
|
||||||
m.Cmdy("aaa.auth", arg[0], "ship", "username", arg[1], arg[2], arg[3])
|
return true
|
||||||
}
|
},
|
||||||
return
|
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||||
}},
|
switch len(arg) {
|
||||||
|
case 0:
|
||||||
|
m.Cmdy("aaa.auth", "ship", "session")
|
||||||
|
case 1:
|
||||||
|
m.Cmdy("aaa.auth", arg[0])
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
switch arg[1] {
|
||||||
|
case "username":
|
||||||
|
m.Cmd("aaa.auth", arg[0], "ship", "username").CopyTo(m, "append").Table()
|
||||||
|
case "userrole":
|
||||||
|
for _, user := range m.Cmd("aaa.auth", arg[0], "ship", "username").Meta["meta"] {
|
||||||
|
msg := m.Cmd("aaa.user", user)
|
||||||
|
for _, role := range msg.Meta["meta"] {
|
||||||
|
m.Log("fuck", "what %v", user)
|
||||||
|
m.Add("append", "username", user)
|
||||||
|
m.Add("append", "userrole", role)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m.Table()
|
||||||
|
default:
|
||||||
|
m.Cmd("aaa.auth", arg[0], "ship", "username", arg[1], "userrole").CopyTo(m, "append").Table()
|
||||||
|
}
|
||||||
|
case 3:
|
||||||
|
case 4:
|
||||||
|
if arg[0] == "create" {
|
||||||
|
m.Cmdy("aaa.auth", "ship", "session", arg[1], arg[2], arg[3])
|
||||||
|
break
|
||||||
|
}
|
||||||
|
m.Cmdy("aaa.auth", arg[0], "ship", "username", arg[1], arg[2], arg[3])
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}},
|
||||||
"work": &ctx.Command{Name: "work [sessid create|select]|[benchid] [right [userrole [componet name [command name [argument name]]]]]", Help: "工作任务", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
"work": &ctx.Command{Name: "work [sessid create|select]|[benchid] [right [userrole [componet name [command name [argument name]]]]]", Help: "工作任务", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) (e error) {
|
||||||
if len(arg) == 0 {
|
if len(arg) == 0 {
|
||||||
m.Cmdy("aaa.auth", "ship", "bench")
|
m.Cmdy("aaa.auth", "ship", "bench")
|
||||||
@ -579,41 +620,26 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心",
|
|||||||
case "rename":
|
case "rename":
|
||||||
m.Cmd("aaa.auth", bid, "data", "name", arg[1])
|
m.Cmd("aaa.auth", bid, "data", "name", arg[1])
|
||||||
case "right":
|
case "right":
|
||||||
m.Cmd("aaa.user", arg[1]).Table(func(maps map[string]string, list []string, line int) bool {
|
if arg[1] == "root" {
|
||||||
if line < 0 {
|
m.Echo("true")
|
||||||
return true
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
userrole := maps["meta"]
|
if len(arg) >= 6 {
|
||||||
if userrole == "root" {
|
if m.Cmds("aaa.auth", bid, "ship", "check", arg[5]) {
|
||||||
|
m.Echo("true")
|
||||||
|
} else if cid := m.Cmdx("aaa.auth", bid, "ship", "userrole", arg[1], "componet", arg[3], "check", arg[5]); kit.Right(cid) {
|
||||||
|
m.Cmd("aaa.auth", bid, cid)
|
||||||
m.Echo("true")
|
m.Echo("true")
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
} else if len(arg) >= 4 {
|
||||||
if len(arg) >= 6 {
|
if m.Cmds("aaa.auth", bid, "ship", "check", arg[3]) {
|
||||||
if m.Cmds("aaa.auth", bid, "ship", "check", arg[5]) {
|
m.Echo("true")
|
||||||
m.Echo("true")
|
} else if cid := m.Cmdx("aaa.auth", bid, "ship", "userrole", arg[1], "check", arg[3]); kit.Right(cid) {
|
||||||
return false
|
m.Cmd("aaa.auth", bid, cid)
|
||||||
}
|
m.Echo("true")
|
||||||
if cid := m.Cmdx("aaa.auth", bid, "ship", "userrole", userrole, "componet", arg[3], "check", arg[5]); kit.Right(cid) {
|
|
||||||
m.Cmd("aaa.auth", bid, cid)
|
|
||||||
m.Echo("true")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
} else if len(arg) >= 4 {
|
|
||||||
if m.Cmds("aaa.auth", bid, "ship", "check", arg[3]) {
|
|
||||||
m.Echo("true")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
if cid := m.Cmdx("aaa.auth", bid, "ship", "userrole", userrole, "check", arg[3]); kit.Right(cid) {
|
|
||||||
m.Cmd("aaa.auth", bid, cid)
|
|
||||||
m.Echo("true")
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return true
|
}
|
||||||
})
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
m.Cmdx("aaa.auth", bid, "data", arg)
|
m.Cmdx("aaa.auth", bid, "data", arg)
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import (
|
|||||||
"encoding/csv"
|
"encoding/csv"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"path"
|
"path"
|
||||||
// "syscall"
|
|
||||||
"toolkit"
|
"toolkit"
|
||||||
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
@ -663,6 +663,14 @@ func (m *Message) Echo(str string, arg ...interface{}) *Message {
|
|||||||
}
|
}
|
||||||
return m.Add("result", str)
|
return m.Add("result", str)
|
||||||
}
|
}
|
||||||
|
func (m *Message) Auto(arg ...string) *Message {
|
||||||
|
for i := 0; i < len(arg); i += 3 {
|
||||||
|
m.Add("append", "value", arg[i])
|
||||||
|
m.Add("append", "name", arg[i+1])
|
||||||
|
m.Add("append", "help", arg[i+2])
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Message) Insert(meta string, index int, arg ...interface{}) string {
|
func (m *Message) Insert(meta string, index int, arg ...interface{}) string {
|
||||||
if m.Meta == nil {
|
if m.Meta == nil {
|
||||||
@ -1364,7 +1372,9 @@ func (m *Message) Cmd(args ...interface{}) *Message {
|
|||||||
m.Echo(v)
|
m.Echo(v)
|
||||||
case nil:
|
case nil:
|
||||||
if m.Options("auto_cmd") {
|
if m.Options("auto_cmd") {
|
||||||
x.Auto(m, c, key, arg...)
|
if x.Auto != nil {
|
||||||
|
x.Auto(m, c, key, arg...)
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
x.Hand(m, c, key, arg...)
|
x.Hand(m, c, key, arg...)
|
||||||
}
|
}
|
||||||
|
@ -175,22 +175,22 @@ func (nfs *NFS) Read(p []byte) (n int, err error) {
|
|||||||
return nfs.in.Read(p)
|
return nfs.in.Read(p)
|
||||||
}
|
}
|
||||||
|
|
||||||
scroll_count := 0
|
|
||||||
which := m.Capi("ninput")
|
|
||||||
what := make([]rune, 0, 1024)
|
|
||||||
rest := make([]rune, 0, 1024)
|
|
||||||
back := make([]rune, 0, 1024)
|
|
||||||
|
|
||||||
m.Optionv("auto_target", m.Optionv("ps_target"))
|
|
||||||
m.Option("auto_cmd", "")
|
|
||||||
defer func() { m.Option("auto_cmd", "") }()
|
|
||||||
|
|
||||||
frame, table, index, pick := map[string]interface{}{}, []map[string]string{}, 0, 0
|
|
||||||
if change, f, t, i := nfs.Auto(what, ":", 0); change {
|
|
||||||
frame, table, index, pick = f, t, i, 0
|
|
||||||
}
|
|
||||||
|
|
||||||
m.TryCatch(m, true, func(m *ctx.Message) {
|
m.TryCatch(m, true, func(m *ctx.Message) {
|
||||||
|
scroll_count := 0
|
||||||
|
which := m.Capi("ninput")
|
||||||
|
what := make([]rune, 0, 1024)
|
||||||
|
rest := make([]rune, 0, 1024)
|
||||||
|
back := make([]rune, 0, 1024)
|
||||||
|
|
||||||
|
m.Optionv("auto_target", m.Optionv("ps_target"))
|
||||||
|
m.Option("auto_cmd", "")
|
||||||
|
defer func() { m.Option("auto_cmd", "") }()
|
||||||
|
|
||||||
|
frame, table, index, pick := map[string]interface{}{}, []map[string]string{}, 0, 0
|
||||||
|
if change, f, t, i := nfs.Auto(what, ":", 0); change {
|
||||||
|
frame, table, index, pick = f, t, i, 0
|
||||||
|
}
|
||||||
|
|
||||||
for {
|
for {
|
||||||
switch ev := termbox.PollEvent(); ev.Type {
|
switch ev := termbox.PollEvent(); ev.Type {
|
||||||
case termbox.EventInterrupt:
|
case termbox.EventInterrupt:
|
||||||
@ -227,8 +227,7 @@ func (nfs *NFS) Read(p []byte) (n int, err error) {
|
|||||||
which = m.Capi("ninput") - 1
|
which = m.Capi("ninput") - 1
|
||||||
}
|
}
|
||||||
if v := m.Conf("input", []interface{}{which, "line"}); v != "" {
|
if v := m.Conf("input", []interface{}{which, "line"}); v != "" {
|
||||||
what, rest := what[:0], rest[:0]
|
what, rest = append(what[:0], []rune(v)...), rest[:0]
|
||||||
what = append(what, []rune(v)...)
|
|
||||||
nfs.prompt(what).shadow(rest)
|
nfs.prompt(what).shadow(rest)
|
||||||
}
|
}
|
||||||
case termbox.KeyCtrlN:
|
case termbox.KeyCtrlN:
|
||||||
@ -236,8 +235,7 @@ func (nfs *NFS) Read(p []byte) (n int, err error) {
|
|||||||
which = 0
|
which = 0
|
||||||
}
|
}
|
||||||
if v := m.Conf("input", []interface{}{which, "line"}); v != "" {
|
if v := m.Conf("input", []interface{}{which, "line"}); v != "" {
|
||||||
what, rest := what[:0], rest[:0]
|
what, rest = append(what[:0], []rune(v)...), rest[:0]
|
||||||
what = append(what, []rune(v)...)
|
|
||||||
nfs.prompt(what).shadow(rest)
|
nfs.prompt(what).shadow(rest)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -371,7 +369,11 @@ func (nfs *NFS) Read(p []byte) (n int, err error) {
|
|||||||
frame, table, index, pick = f, t, i, 0
|
frame, table, index, pick = f, t, i, 0
|
||||||
}
|
}
|
||||||
|
|
||||||
nfs.shadow(what[index:], table, frame)
|
if nfs.shadow(what[index:], table, frame); len(table) > 0 {
|
||||||
|
rest = append(rest[:0], []rune(table[0][kit.Format(frame["field"])])...)
|
||||||
|
nfs.prompt(what).shadow(rest)
|
||||||
|
nfs.shadow(what[index:], table, frame)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -131,6 +131,48 @@ func Merge(m *ctx.Message, uri string, arg ...string) string {
|
|||||||
return strings.Join(adds, "")
|
return strings.Join(adds, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (web *WEB) Login(msg *ctx.Message, w http.ResponseWriter, r *http.Request) bool {
|
||||||
|
if msg.Confs("cas_url") {
|
||||||
|
if !cas.IsAuthenticated(r) && !msg.Confs("skip_cas") {
|
||||||
|
r.URL, _ = r.URL.Parse(r.Header.Get("index_url"))
|
||||||
|
cas.RedirectToLogin(w, r)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
for k, v := range cas.Attributes(r) {
|
||||||
|
for _, val := range v {
|
||||||
|
msg.Add("option", k, val)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if msg.Options("ticket") {
|
||||||
|
msg.Option("username", cas.Username(r))
|
||||||
|
if lark := msg.Find("web.chat.lark"); lark != nil {
|
||||||
|
msg.Option("username", lark.Cmdx("user", msg.Option("email"), "id"))
|
||||||
|
}
|
||||||
|
msg.Option("uuid", msg.Option(msg.Conf("cas_uuid")))
|
||||||
|
msg.Option("sessid", msg.Spawn().Cmd("session", "uuid").Result(0))
|
||||||
|
|
||||||
|
uri, _ := r.URL.Parse(r.Header.Get("index_url"))
|
||||||
|
redirect := uri.Path
|
||||||
|
if b := uri.Query().Get("bench"); b != "" {
|
||||||
|
redirect += "?bench=" + b
|
||||||
|
}
|
||||||
|
http.Redirect(w, r, redirect, http.StatusTemporaryRedirect)
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
} else if msg.Options("username") && msg.Options("password") {
|
||||||
|
if sessid := msg.Spawn().Cmd("session", "password").Result(0); sessid != "" {
|
||||||
|
msg.Option("sessid", sessid)
|
||||||
|
msg.Option("password", "")
|
||||||
|
} else {
|
||||||
|
w.WriteHeader(http.StatusUnauthorized)
|
||||||
|
msg.Option("username", "")
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
func (web *WEB) HandleCmd(m *ctx.Message, key string, cmd *ctx.Command) {
|
func (web *WEB) HandleCmd(m *ctx.Message, key string, cmd *ctx.Command) {
|
||||||
web.HandleFunc(key, func(w http.ResponseWriter, r *http.Request) {
|
web.HandleFunc(key, func(w http.ResponseWriter, r *http.Request) {
|
||||||
m.TryCatch(m.Spawn(), true, func(msg *ctx.Message) {
|
m.TryCatch(m.Spawn(), true, func(msg *ctx.Message) {
|
||||||
@ -156,53 +198,14 @@ func (web *WEB) HandleCmd(m *ctx.Message, key string, cmd *ctx.Command) {
|
|||||||
msg.Log("info", "")
|
msg.Log("info", "")
|
||||||
}
|
}
|
||||||
for k, v := range r.Form {
|
for k, v := range r.Form {
|
||||||
msg.Add("option", k, v)
|
msg.Option(k, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.Put("option", "request", r).Put("option", "response", w).Sess("web", msg)
|
if msg.Put("option", "request", r).Put("option", "response", w).Sess("web", msg); web.Login(msg, w, r) {
|
||||||
if msg.Confs("cas_url") {
|
msg.Log("cmd", "%s [] %v", key, msg.Meta["option"])
|
||||||
if !cas.IsAuthenticated(r) && !msg.Confs("skip_cas") {
|
cmd.Hand(msg, msg.Target(), msg.Option("path"))
|
||||||
r.URL, _ = r.URL.Parse(r.Header.Get("index_url"))
|
|
||||||
cas.RedirectToLogin(w, r)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
for k, v := range cas.Attributes(r) {
|
|
||||||
for _, val := range v {
|
|
||||||
msg.Add("option", k, val)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if msg.Options("ticket") {
|
|
||||||
msg.Option("username", cas.Username(r))
|
|
||||||
if lark := m.Find("web.chat.lark"); lark != nil {
|
|
||||||
msg.Option("username", lark.Cmdx("user", msg.Option("email"), "id"))
|
|
||||||
}
|
|
||||||
msg.Option("uuid", msg.Option(msg.Conf("cas_uuid")))
|
|
||||||
msg.Option("sessid", msg.Spawn().Cmd("session", "uuid").Result(0))
|
|
||||||
|
|
||||||
uri, _ := r.URL.Parse(r.Header.Get("index_url"))
|
|
||||||
redirect := uri.Path
|
|
||||||
if b := uri.Query().Get("bench"); b != "" {
|
|
||||||
redirect += "?bench=" + b
|
|
||||||
}
|
|
||||||
http.Redirect(w, r, redirect, http.StatusTemporaryRedirect)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
} else if msg.Options("username") && msg.Options("password") {
|
|
||||||
if sessid := msg.Spawn().Cmd("session", "password").Result(0); sessid != "" {
|
|
||||||
msg.Option("sessid", sessid)
|
|
||||||
msg.Option("password", "")
|
|
||||||
} else {
|
|
||||||
w.WriteHeader(http.StatusUnauthorized)
|
|
||||||
msg.Option("username", "")
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.Log("cmd", "%s [] %v", key, msg.Meta["option"])
|
|
||||||
cmd.Hand(msg, msg.Target(), msg.Option("path"))
|
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case msg.Has("redirect"):
|
case msg.Has("redirect"):
|
||||||
http.Redirect(w, r, msg.Append("redirect"), http.StatusTemporaryRedirect)
|
http.Redirect(w, r, msg.Append("redirect"), http.StatusTemporaryRedirect)
|
||||||
@ -247,6 +250,8 @@ func (web *WEB) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||||||
r.Header.Set("remote_ip", ip)
|
r.Header.Set("remote_ip", ip)
|
||||||
} else if ip := r.Header.Get("X-Real-Ip"); ip != "" {
|
} else if ip := r.Header.Get("X-Real-Ip"); ip != "" {
|
||||||
r.Header.Set("remote_ip", ip)
|
r.Header.Set("remote_ip", ip)
|
||||||
|
} else if strings.HasPrefix(r.RemoteAddr, "[") {
|
||||||
|
r.Header.Set("remote_ip", strings.Split(r.RemoteAddr, "]")[0][1:])
|
||||||
} else {
|
} else {
|
||||||
r.Header.Set("remote_ip", strings.Split(r.RemoteAddr, ":")[0])
|
r.Header.Set("remote_ip", strings.Split(r.RemoteAddr, ":")[0])
|
||||||
}
|
}
|
||||||
@ -988,7 +993,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 用户角色
|
// 用户角色
|
||||||
m.Cmdy("aaa.sess", m.Option("sessid"), "userrole")
|
m.Cmd("aaa.sess", m.Option("sessid"), "userrole").CopyTo(m, "append")
|
||||||
m.Log("info", "username: %v userrole: %v", m.Meta["username"], m.Meta["userrole"])
|
m.Log("info", "username: %v userrole: %v", m.Meta["username"], m.Meta["userrole"])
|
||||||
return
|
return
|
||||||
}},
|
}},
|
||||||
@ -1115,17 +1120,16 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 响应模板
|
// 响应模板
|
||||||
group, order := m.Option("componet_group", m.Confx("componet_group")), m.Option("componet_name")
|
group, order, right := m.Option("componet_group", m.Confx("componet_group")), m.Option("componet_name"), m.Options("right", !m.Confs("componet", "login"))
|
||||||
|
|
||||||
// 会话检查
|
// 会话检查
|
||||||
if m.Options("right", !m.Confs("login_right") || !m.Confs("componet", "login")) {
|
if right || m.Options("right", !m.Confs("login_right")) {
|
||||||
m.Log("info", "no limit")
|
m.Log("info", "no limit") // 禁用权限
|
||||||
// 禁用权限
|
} else if userrole := m.Option("userrole", m.Cmd("web.session").Append("userrole")); userrole == "" { // 用户登录
|
||||||
} else if username := m.Option("username", m.Cmd("web.session").Append("username")); username == "" { // 用户登录
|
|
||||||
m.Log("info", "no user")
|
m.Log("info", "no user")
|
||||||
group, order = m.Option("componet_group", "login"), m.Option("componet_name", "")
|
group, order, right = m.Option("componet_group", "login"), m.Option("componet_name", ""), m.Options("right", true)
|
||||||
m.Option("right", "true")
|
|
||||||
if m.Options("bench") && !m.Cmds("aaa.work", m.Option("bench")) {
|
if m.Options("bench") && !m.Cmds("aaa.work", m.Option("bench")) {
|
||||||
|
m.Log("info", "no work")
|
||||||
m.Append("redirect", merge(m, m.Option("index_url"), "bench", ""))
|
m.Append("redirect", merge(m, m.Option("index_url"), "bench", ""))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -1135,15 +1139,15 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
} else if !m.Options("bench") || !m.Cmds("aaa.work", m.Option("bench")) { // 创建空间
|
} else if !m.Options("bench") || !m.Cmds("aaa.work", m.Option("bench")) { // 创建空间
|
||||||
m.Append("redirect", merge(m, m.Option("index_url"), "bench", m.Cmdx("aaa.work", m.Option("sessid"), "create", "web")))
|
m.Append("redirect", merge(m, m.Option("index_url"), "bench", m.Cmdx("aaa.work", m.Option("sessid"), "create", "web")))
|
||||||
return
|
return
|
||||||
} else if !m.Options("right", m.Cmds("aaa.work", m.Option("bench"), "right", m.Option("username"), "componet", m.Option("componet_group"))) { // 没有权限
|
} else if !m.Options("right", m.Cmds("aaa.work", m.Option("bench"), "right", m.Option("userrole"), "componet", m.Option("componet_group"))) { // 没有权限
|
||||||
group, order = m.Option("componet_group", "login"), m.Option("componet_name", "")
|
group, order = m.Option("componet_group", "login"), m.Option("componet_name", "")
|
||||||
} else { //n访问成功
|
} else { //n访问成功
|
||||||
m.Cmd("aaa.auth", m.Option("bench"), "data", "access_time", m.Time())
|
m.Cmd("aaa.auth", m.Option("bench"), "data", "access_time", m.Time())
|
||||||
m.Optionv("session", m.Confv("auth", []string{m.Option("sessid")}))
|
// m.Optionv("session", m.Confv("auth", []string{m.Option("sessid")}))
|
||||||
m.Optionv("bench_data", m.Confv("auth", []string{m.Option("bench"), "data"}))
|
// m.Optionv("bench_data", m.Confv("auth", []string{m.Option("bench"), "data"}))
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Log("info", "json: %v group: %v order: %v username: %v right: %v", accept_json, group, order, m.Option("username"), m.Option("right"))
|
m.Log("info", "json: %v group: %v order: %v userrole: %v right: %v", accept_json, group, order, m.Option("userrole"), m.Option("right"))
|
||||||
|
|
||||||
for _, v := range m.Confv("componet", group).([]interface{}) {
|
for _, v := range m.Confv("componet", group).([]interface{}) {
|
||||||
val := v.(map[string]interface{})
|
val := v.(map[string]interface{})
|
||||||
@ -1171,7 +1175,7 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 权限检查
|
// 权限检查
|
||||||
if m.Options("bench") && !m.Cmds("aaa.work", m.Option("bench"), "right", m.Option("username"), "componet", m.Option("componet_group"), "command", args[0]) {
|
if m.Options("bench") && !m.Cmds("aaa.work", m.Option("bench"), "right", m.Option("userrole"), "componet", m.Option("componet_group"), "command", args[0]) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1217,18 +1221,14 @@ var Index = &ctx.Context{Name: "web", Help: "应用中心",
|
|||||||
"action_time": msg.Time(), "order": m.Option("componet_name_order"), "cmd": args,
|
"action_time": msg.Time(), "order": m.Option("componet_name_order"), "cmd": args,
|
||||||
}).Cmd("aaa.auth", m.Option("bench"), "data", "option", name_alias, "modify_time", msg.Time())
|
}).Cmd("aaa.auth", m.Option("bench"), "data", "option", name_alias, "modify_time", msg.Time())
|
||||||
}
|
}
|
||||||
m.Log("what", "------%vv", msg.Append("directory"))
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
msg = m
|
msg = m
|
||||||
}
|
}
|
||||||
|
|
||||||
m.Log("what", "------%vv", msg.Append("directory"))
|
|
||||||
// 添加响应
|
// 添加响应
|
||||||
if msg.Appends("directory") {
|
if msg.Appends("directory") {
|
||||||
m.Log("what", "------%vv", msg.Append("directory"))
|
|
||||||
m.Append("download_file", fmt.Sprintf("/download/%s", msg.Append("directory")))
|
m.Append("download_file", fmt.Sprintf("/download/%s", msg.Append("directory")))
|
||||||
m.Log("what", "------%vv", msg.Append("directory"))
|
|
||||||
return
|
return
|
||||||
} else if accept_json {
|
} else if accept_json {
|
||||||
list = append(list, msg.Meta)
|
list = append(list, msg.Meta)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user