1
0
mirror of https://shylinux.com/x/icebergs synced 2025-04-26 01:24:05 +08:00

opt login

This commit is contained in:
IT 老营长 @云轩领航-创始人 2022-02-23 12:16:03 +08:00
parent 47b61c540a
commit b278396504
11 changed files with 101 additions and 31 deletions

View File

@ -20,20 +20,27 @@ func init() {
Index.Merge(&ice.Context{Commands: map[string]*ice.Command{
FOREVER: {Name: "forever", Help: "启动", Action: map[string]*ice.Action{
SERVE: {Name: "serve", Help: "服务", Hand: func(m *ice.Message, arg ...string) {
env := []string{PATH, BinPath()}
for _, k := range []string{HOME, CTX_SHY, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} {
env = append(env, k, kit.Env(k))
env := []string{PATH, BinPath(), HOME, kit.Select(kit.Path(""), os.Getenv(HOME))}
for _, k := range []string{SHELL, CTX_SHY, CTX_DEV, CTX_OPS, CTX_ARG, CTX_PID, CTX_USER, CTX_SHARE, CTX_RIVER} {
if kit.Env(k) != "" {
env = append(env, k, kit.Env(k))
}
}
m.Option(CMD_ENV, env)
m.Option(CMD_ERRPUT, kit.Select(ice.BIN_BOOT_LOG, kit.Env(CTX_LOG)))
m.Optionv(CMD_INPUT, os.Stdin)
m.Optionv(CMD_OUTPUT, os.Stdout)
m.Optionv(CMD_ERRPUT, os.Stderr)
if p := kit.Env(CTX_LOG); p != "" {
m.Optionv(CMD_ERRPUT, p)
}
m.Cmdy(FOREVER, kit.Select(os.Args[0], nfs.PWD+ice.BIN_ICE_BIN, kit.FileExists(ice.BIN_ICE_BIN)),
SERVE, START, ice.DEV, "", aaa.USERNAME, aaa.ROOT, aaa.PASSWORD, aaa.ROOT, arg)
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
for {
println(kit.Format("%s run %s", kit.Now(), kit.Join(arg, ice.SP)))
if m.Sleep("1s"); IsSuccess(m.Cmd(SYSTEM, arg, kit.Dict(CMD_INPUT, os.Stdin, CMD_OUTPUT, os.Stdout))) {
if m.Sleep("1s"); IsSuccess(m.Cmd(SYSTEM, arg)) {
println(kit.Format("%s exit", kit.Now()))
return
}

View File

@ -119,9 +119,10 @@ const (
UBUNTU = "ubuntu"
)
const (
USER = "USER"
HOME = "HOME"
PATH = "PATH"
SHELL = "SHELL"
USER = "USER"
HOME = "HOME"
PATH = "PATH"
)
const (
CTX_SHY = "ctx_shy"
@ -156,7 +157,7 @@ func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
RUNTIME: {Name: RUNTIME, Help: "运行环境", Value: kit.Dict()},
}, Commands: map[string]*ice.Command{
RUNTIME: {Name: "runtime info=ifconfig,hostinfo,hostname,userinfo,procinfo,bootinfo,diskinfo auto", Help: "运行环境", Action: map[string]*ice.Action{
RUNTIME: {Name: "runtime info=ifconfig,hostinfo,hostname,userinfo,procinfo,bootinfo,diskinfo,env auto", Help: "运行环境", Action: map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
_runtime_init(m)
m.Cmd(RUNTIME, MAXPROCS, "1")
@ -193,6 +194,13 @@ func init() {
DISKINFO: {Name: "diskinfo", Help: "磁盘信息", Hand: func(m *ice.Message, arg ...string) {
_runtime_diskinfo(m)
}},
"env": {Name: "env", Help: "环境变量", Hand: func(m *ice.Message, arg ...string) {
for _, v := range os.Environ() {
ls := strings.SplitN(v, "=", 2)
m.Push(mdb.NAME, ls[0])
m.Push(mdb.VALUE, ls[1])
}
}},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) > 0 && arg[0] == BOOTINFO {
arg = arg[1:]

View File

@ -53,6 +53,8 @@ func _system_cmd(m *ice.Message, arg ...string) *exec.Cmd {
return cmd
}
func _system_out(m *ice.Message, out string) io.Writer {
defer func() { m.Warn(recover(), "output", out) }()
if w, ok := m.Optionv(out).(io.Writer); ok {
return w
} else if m.Option(out) == "" {
@ -65,6 +67,9 @@ func _system_out(m *ice.Message, out string) io.Writer {
return nil
}
func _system_find(m *ice.Message, bin string, dir ...string) string {
if strings.Contains(bin, ice.DF) {
return bin
}
if strings.HasPrefix(bin, ice.PS) {
return bin
}

View File

@ -47,14 +47,18 @@ func (f *Frame) Start(m *ice.Message, arg ...string) bool {
bio.WriteString(l.p)
bio.WriteString(ice.SP)
if p, ok := view[PREFIX].(string); ok {
bio.WriteString(p)
if ice.Info.Colors == true {
if p, ok := view[PREFIX].(string); ok {
bio.WriteString(p)
}
}
bio.WriteString(l.l)
bio.WriteString(ice.SP)
bio.WriteString(l.s)
if p, ok := view[SUFFIX].(string); ok {
bio.WriteString(p)
if ice.Info.Colors == true {
if p, ok := view[SUFFIX].(string); ok {
bio.WriteString(p)
}
}
bio.WriteString(ice.NL)
bio.Flush()

View File

@ -70,7 +70,9 @@ func (f *Frame) prompt(m *ice.Message, list ...string) *Frame {
case TARGET:
fmt.Fprintf(f.stdout, f.target.Name)
default:
fmt.Fprintf(f.stdout, v)
if ice.Info.Colors || v[0] != '\033' {
fmt.Fprintf(f.stdout, v)
}
}
}
return f
@ -165,7 +167,9 @@ func (f *Frame) scan(m *ice.Message, h, line string) *Frame {
// continue // 注释
// }
if ps = f.ps1; f.stdout == os.Stdout {
f.printf(m, "\033[0m") // 清空格式
if ice.Info.Colors {
f.printf(m, "\033[0m") // 清空格式
}
}
line = f.parse(m, line)
}

View File

@ -21,6 +21,24 @@ var rewriteList = []interface{}{}
func AddRewrite(cb interface{}) { rewriteList = append(rewriteList, cb) }
func _serve_domain(m *ice.Message) string {
if p := m.Config(DOMAIN); p != "" {
return p
}
if p := m.R.Header.Get("X-Host"); p != "" {
return p
}
if m.R.Method == "POST" {
if p := m.R.Header.Get("Referer"); p != "" {
return p
}
}
if m.R.TLS == nil {
return kit.Format("http://%s", m.R.Host)
} else {
return kit.Format("https://%s", m.R.Host)
}
}
func _serve_main(m *ice.Message, w http.ResponseWriter, r *http.Request) bool {
if r.Header.Get("Index-Module") == "" {
r.Header.Set("Index-Module", m.Prefix())
@ -135,11 +153,12 @@ func _serve_handle(key string, cmd *ice.Command, msg *ice.Message, w http.Respon
}
// 请求地址
msg.Option(ice.MSG_USERWEB, kit.Select(msg.Config(DOMAIN), kit.Select(r.Header.Get("Referer"), r.Header.Get("X-Host"))))
msg.R, msg.W = r, w
msg.Option(ice.MSG_USERWEB, _serve_domain(msg))
msg.Option(ice.MSG_USERADDR, kit.Select(r.RemoteAddr, r.Header.Get(ice.MSG_USERADDR)))
msg.Option(ice.MSG_USERIP, r.Header.Get(ice.MSG_USERIP))
msg.Option(ice.MSG_USERUA, r.Header.Get("User-Agent"))
msg.R, msg.W = r, w
msg.Debug("what %v", msg.FormatMeta())
// 会话别名
if sessid := msg.Option(CookieName(msg.Option(ice.MSG_USERWEB))); sessid != "" {

View File

@ -19,8 +19,7 @@ func _space_link(m *ice.Message, pod string, arg ...interface{}) string {
return tcp.ReplaceLocalhost(m, kit.MergePOD(m.Option(ice.MSG_USERWEB), pod, arg...))
}
func _space_domain(m *ice.Message) (link string) {
link = m.Config(DOMAIN)
if link == "" {
if link = m.Config(DOMAIN); link == "" {
link = m.Cmd(SPACE, ice.DEV, cli.PWD).Append(mdb.LINK)
}
if link == "" {
@ -29,6 +28,13 @@ func _space_domain(m *ice.Message) (link string) {
if link == "" {
link = m.Option(ice.MSG_USERWEB)
}
if link == "" && m.R != nil && m.R.Host != "" && !tcp.IsLocalHost(m, m.R.Host) {
if m.R.TLS == nil {
link = kit.Format("http://%s", m.R.Host)
} else {
link = kit.Format("https://%s", m.R.Host)
}
}
if link == "" {
link = kit.Format("http://localhost:%s", m.Cmd(SERVE).Append(tcp.PORT))
}
@ -224,12 +230,14 @@ func _space_fork(m *ice.Message) {
m.Go(func(msg *ice.Message) {
switch m.Option(ice.CMD) {
case cli.PWD:
link := kit.MergeURL(_space_domain(msg), aaa.GRANT, name)
link := kit.MergeURL(_space_domain(m), aaa.GRANT, name)
msg.Sleep300ms(SPACE, name, cli.PWD, name, link, msg.Cmdx(cli.QRCODE, link))
case "sso":
link := _space_domain(msg)
link := _space_domain(m)
m.Debug("what %v", link)
ls := strings.Split(kit.ParseURL(link).Path, ice.PS)
link = kit.MergeURL2(_space_domain(msg), "/chat/sso", "space", kit.Select("", ls, 3), "back", m.Option(ice.MSG_USERWEB))
link = kit.MergeURL2(_space_domain(m), "/chat/sso", "space", kit.Select("", ls, 3), "back", m.Option(ice.MSG_USERWEB))
m.Debug("what %v", link)
msg.Sleep300ms(SPACE, name, cli.PWD, name, link, msg.Cmdx(cli.QRCODE, link))
default:
msg.Sleep300ms(SPACE, name, cli.PWD, name)

View File

@ -13,6 +13,7 @@ import (
"shylinux.com/x/icebergs/base/mdb"
"shylinux.com/x/icebergs/base/nfs"
"shylinux.com/x/icebergs/base/tcp"
"shylinux.com/x/icebergs/base/web"
kit "shylinux.com/x/toolkits"
)
@ -68,7 +69,12 @@ func init() {
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.Config(nfs.PATH))
m.Cmd(aaa.ROLE, aaa.WHITE, aaa.VOID, m.PrefixKey())
m.Config(ice.CONTEXTS, _contexts)
m.Watch(web.SERVE_START, m.PrefixKey())
}},
web.SERVE_START: {Name: "serve.start", Help: "服务启动", Hand: func(m *ice.Message, arg ...string) {
_publish_file(m, ice.ICE_BIN)
}},
ice.VOLCANOS: {Name: "volcanos", Help: "火山架", Hand: func(m *ice.Message, arg ...string) {
defer func() { m.EchoQRCode(m.Option(ice.MSG_USERWEB)) }()
defer func() { m.Cmdy(PUBLISH, ice.CONTEXTS) }()

View File

@ -24,6 +24,7 @@ var Info = struct {
UserName string
PassWord string
Colors bool
Domain string
NodeType string
NodeName string

View File

@ -111,6 +111,12 @@ func Run(arg ...string) string {
switch Index.Merge(Index).Begin(Pulse.Spawn(), arg...); kit.Select("", arg, 0) {
case SERVE, SPACE: // 启动服务
switch path.Base(os.Getenv("SHELL")) {
case "", ".":
Info.Colors = false
default:
Info.Colors = true
}
if log.LogDisable = false; Index.Start(Pulse, arg...) {
Pulse.TryCatch(Pulse, true, func(Pulse *Message) { Index.wg.Wait() })
os.Exit(kit.Int(Pulse.Option(EXIT)))

20
logs.go
View File

@ -20,15 +20,17 @@ func (m *Message) log(level string, str string, arg ...interface{}) *Message {
// 日志颜色
prefix, suffix := "", ""
switch level {
case LOG_CREATE, LOG_INSERT, LOG_MODIFY, LOG_EXPORT, LOG_IMPORT:
prefix, suffix = "\033[36;44m", "\033[0m"
case LOG_CMDS, LOG_START, LOG_SERVE:
prefix, suffix = "\033[32m", "\033[0m"
case LOG_WARN, LOG_ERROR, LOG_CLOSE:
prefix, suffix = "\033[31m", "\033[0m"
case LOG_AUTH, LOG_COST:
prefix, suffix = "\033[33m", "\033[0m"
if Info.Colors {
switch level {
case LOG_CREATE, LOG_INSERT, LOG_MODIFY, LOG_EXPORT, LOG_IMPORT:
prefix, suffix = "\033[36;44m", "\033[0m"
case LOG_CMDS, LOG_START, LOG_SERVE:
prefix, suffix = "\033[32m", "\033[0m"
case LOG_WARN, LOG_ERROR, LOG_CLOSE:
prefix, suffix = "\033[31m", "\033[0m"
case LOG_AUTH, LOG_COST:
prefix, suffix = "\033[33m", "\033[0m"
}
}
// 文件行号