From 705b2f8911efbc35e7df2f4cfdede4f97e1f01aa Mon Sep 17 00:00:00 2001 From: shaoying Date: Mon, 20 Nov 2017 08:36:57 +0800 Subject: [PATCH] =?UTF-8?q?mac=20mod=20auth=20tree=20=E5=90=8C=E6=AD=A50.2?= =?UTF-8?q?.0=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/context/aaa/aaa.go | 122 +++++++++++++++++++++++------------------ 1 file changed, 68 insertions(+), 54 deletions(-) diff --git a/src/context/aaa/aaa.go b/src/context/aaa/aaa.go index 71f95cf9..6698d128 100644 --- a/src/context/aaa/aaa.go +++ b/src/context/aaa/aaa.go @@ -41,37 +41,6 @@ func (aaa *AAA) Start(m *ctx.Message, arg ...string) bool { // {{{ func (aaa *AAA) Spawn(c *ctx.Context, m *ctx.Message, arg ...string) ctx.Server { // {{{ c.Caches = map[string]*ctx.Cache{ "username": &ctx.Cache{Name: "用户名", Value: arg[0], Help: "显示已经启动运行模块的数量"}, - "password": &ctx.Cache{}, - "time": &ctx.Cache{Name: "登录时间", Value: fmt.Sprintf("%d", time.Now().Unix()), Help: "用户登录时间"}, - "sessid": &ctx.Cache{Name: "会话标识", Value: aaa.session(arg[0]), Help: "用户的会话标识"}, - "group": &ctx.Cache{Name: "群组", Value: "void", Help: "用户所属群组"}, - } - - *c.Caches["password"] = *Index.Caches["password"] - if len(arg) > 2 { - c.Caches["group"].Value = arg[2] - c.Caches["password"].Value = arg[1] - } else if len(arg) > 1 { - m.Cap("password", arg[1]) - } - - c.Configs = map[string]*ctx.Config{} - c.Commands = map[string]*ctx.Command{} - - s := new(AAA) - s.Context = c - return s -} - -// }}} -func (aaa *AAA) Exit(m *ctx.Message, arg ...string) bool { // {{{ - return true -} - -// }}} - -var Index = &ctx.Context{Name: "aaa", Help: "认证中心", - Caches: map[string]*ctx.Cache{ "password": &ctx.Cache{Name: "密码", Value: "", Help: "用户密码,加密存储", Hand: func(m *ctx.Message, x *ctx.Cache, arg ...string) string { if len(arg) > 0 { // {{{ if arg[0] == "" { @@ -92,7 +61,32 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心", return x.Value // }}} }}, - }, + "group": &ctx.Cache{Name: "群组", Value: arg[0], Help: "用户所属群组"}, + "sessid": &ctx.Cache{Name: "会话标识", Value: aaa.session(arg[0]), Help: "用户的会话标识"}, + "time": &ctx.Cache{Name: "登录时间", Value: fmt.Sprintf("%d", time.Now().Unix()), Help: "用户登录时间"}, + } + + if len(arg) > 2 { + c.Caches["password"].Value = arg[1] + c.Caches["group"].Value = arg[2] + } else if len(arg) > 1 { + m.Cap("password", arg[1]) + } + + s := new(AAA) + s.Context = c + return s +} + +// }}} +func (aaa *AAA) Exit(m *ctx.Message, arg ...string) bool { // {{{ + return true +} + +// }}} + +var Index = &ctx.Context{Name: "aaa", Help: "认证中心", + Caches: map[string]*ctx.Cache{}, Configs: map[string]*ctx.Config{ "rootname": &ctx.Config{Name: "根用户的名称", Value: "root", Help: "系统根据此名确定是否超级用户"}, }, @@ -101,13 +95,13 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心", aaa := c.Server.(*AAA) // {{{ switch len(arg) { case 0: - target := m.Target - m.Target.Travel(func(c *ctx.Context) bool { - m.Target = c - m.Echo("%s %s %s\n", c.Name, m.Cap("group"), m.Cap("sessid")) + m.Travel(m.Target, func(m *ctx.Message) bool { + if m.Target.Name == "aaa" { + return true + } + m.Echo("%s %s %s\n", m.Target.Name, m.Cap("group"), m.Cap("sessid")) return true }) - m.Target = target case 1: target := m.Target if s, ok := aaa.sessions[arg[0]]; ok { @@ -118,30 +112,42 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心", } m.Target = target case 2: - if s := m.Target.Find(arg[0]); s != nil { + s := m.Target.Find(arg[0]) + if s != nil { + old := m.Source + defer func() { m.Source = old }() + m.Source = s + m.Target = s - log.Println(aaa.Name, "login in:", arg[0]) + m.Cap("password", arg[1]) log.Println(aaa.Name, "login in:", arg[0]) + old.Owner = s - m.Source.Owner = s - if arg[0] == m.Conf("rootname") { - ctx.Index.Owner = s - c.Owner = s - } - return m.Cap("sessid") } else { m.Start(arg[0], arg...) - sessid := m.Cap("sessid") - aaa.sessions[sessid] = m.Target + s = m.Target + + aaa.sessions[m.Cap("sessid")] = s log.Println(aaa.Name, "login up:", arg[0]) - m.Source.Owner = s - if arg[0] == m.Conf("rootname") { - ctx.Index.Owner = s - c.Owner = s - } - return sessid } + + m.Target.Owner = s + + m.Source.Owner = ctx.Index.Owner + if arg[0] == m.Conf("rootname") { + ctx.Index.Owner = s + m.Travel(m.Target.Root, func(m *ctx.Message) bool { + if m.Target.Owner == nil { + m.Target.Owner = s + } + return true + }) + } + m.Source.Owner = s + m.Source.Group = m.Cap("group") + + return m.Cap("sessid") case 3: m.Start(arg[0], arg...) } @@ -149,11 +155,19 @@ var Index = &ctx.Context{Name: "aaa", Help: "认证中心", // }}} }}, }, + Index: map[string]*ctx.Context{ + "void": &ctx.Context{Name: "void", + Commands: map[string]*ctx.Command{ + "login": &ctx.Command{}, + }, + }, + }, } func init() { aaa := &AAA{} aaa.Context = Index - aaa.sessions = make(map[string]*ctx.Context) ctx.Index.Register(Index, aaa) + + aaa.sessions = make(map[string]*ctx.Context) }