1
0
forked from x/icebergs
This commit is contained in:
harveyshao 2022-04-01 09:29:16 +08:00
parent 97e4564f6e
commit f1efc38f47
6 changed files with 66 additions and 10 deletions

View File

@ -6,4 +6,4 @@ const AAA = "aaa"
var Index = &ice.Context{Name: AAA, Help: "认证模块"} var Index = &ice.Context{Name: AAA, Help: "认证模块"}
func init() { ice.Index.Register(Index, nil, ROLE, SESS, TOTP, USER) } func init() { ice.Index.Register(Index, nil, ROLE, SESS, TOTP, USER, RSA) }

56
base/aaa/rsa.go Normal file
View File

@ -0,0 +1,56 @@
package aaa
import (
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"golang.org/x/crypto/ssh"
ice "shylinux.com/x/icebergs"
"shylinux.com/x/icebergs/base/mdb"
kit "shylinux.com/x/toolkits"
)
const (
PUBLIC = "public"
PRIVATE = "private"
)
const RSA = "rsa"
func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
RSA: {Name: RSA, Help: "角色", Value: kit.Data(mdb.SHORT, mdb.HASH, mdb.FIELD, "time,hash,public,private")},
}, Commands: map[string]*ice.Command{
RSA: {Name: "rsa hash auto create import", Help: "公钥", Action: ice.MergeAction(map[string]*ice.Action{
ice.CTX_INIT: {Hand: func(m *ice.Message, arg ...string) {
// m.Cmd(m.PrefixKey(), mdb.IMPORT)
}},
mdb.IMPORT: {Name: "import key=.ssh/id_rsa pub=.ssh/id_rsa.pub", Help: "导入", Hand: func(m *ice.Message, arg ...string) {
m.Conf(m.PrefixKey(), kit.Keys(mdb.HASH, "id_rsa"), kit.Data(mdb.TIME, m.Time(),
PRIVATE, m.Cmdx("nfs.cat", kit.HomePath(m.Option("key"))),
PUBLIC, m.Cmdx("nfs.cat", kit.HomePath(m.Option("pub"))),
))
}},
mdb.EXPORT: {Name: "export key=.ssh/id_rsa pub=.ssh/id_rsa.pub", Help: "导出", Hand: func(m *ice.Message, arg ...string) {
m.Cmd(m.PrefixKey(), m.Option(mdb.HASH)).Table(func(index int, value map[string]string, head []string) {
m.Cmdx("nfs.save", kit.HomePath(m.Option("key")), value[PRIVATE])
m.Cmdx("nfs.save", kit.HomePath(m.Option("pub")), value[PUBLIC])
})
}},
mdb.CREATE: {Name: "create bits=2048,4096", Help: "创建", Hand: func(m *ice.Message, arg ...string) {
if key, err := rsa.GenerateKey(rand.Reader, kit.Int(m.Option("bits"))); m.Assert(err) {
if pub, err := ssh.NewPublicKey(key.Public()); m.Assert(err) {
m.Cmdy(mdb.INSERT, m.PrefixKey(), "", mdb.HASH,
PRIVATE, string(pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)})),
PUBLIC, string(ssh.MarshalAuthorizedKey(pub)),
)
}
}
}},
}, mdb.HashAction()), Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
mdb.HashSelect(m, arg...)
m.PushAction(mdb.EXPORT, mdb.REMOVE)
}},
}})
}

View File

@ -102,7 +102,7 @@ func init() {
Index.Merge(&ice.Context{Configs: map[string]*ice.Config{ Index.Merge(&ice.Context{Configs: map[string]*ice.Config{
CONFIG: {Name: CONFIG, Help: "配置", Value: kit.Data(nfs.PATH, ice.VAR_CONF)}, CONFIG: {Name: CONFIG, Help: "配置", Value: kit.Data(nfs.PATH, ice.VAR_CONF)},
}, Commands: map[string]*ice.Command{ }, Commands: map[string]*ice.Command{
CONFIG: {Name: "config key auto clear", Help: "配置", Action: map[string]*ice.Action{ CONFIG: {Name: "config key auto reset", Help: "配置", Action: map[string]*ice.Action{
SAVE: {Name: "save", Help: "保存", Hand: func(m *ice.Message, arg ...string) { SAVE: {Name: "save", Help: "保存", Hand: func(m *ice.Message, arg ...string) {
_config_save(m, arg[0], arg[1:]...) _config_save(m, arg[0], arg[1:]...)
}}, }},
@ -122,9 +122,9 @@ func init() {
} }
m.Confv(arg[0], arg[1], kit.List(list...)) m.Confv(arg[0], arg[1], kit.List(list...))
}}, }},
"clear": {Name: "clear conf key", Help: "清空", Hand: func(m *ice.Message, arg ...string) { "reset": {Name: "reset key sub", Help: "重置", Hand: func(m *ice.Message, arg ...string) {
m.Conf(m.Option("conf"), m.Option("key"), "") m.Conf(m.Option("key"), m.Option("sub"), "")
m.Cmd(ice.EXIT, 1) m.Go(func() { m.Cmd(ice.EXIT, 1) })
}}, }},
}, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) { }, Hand: func(m *ice.Message, c *ice.Context, cmd string, arg ...string) {
if len(arg) == 0 { if len(arg) == 0 {

View File

@ -51,8 +51,8 @@ type {{.Option "name"}} struct {
list string {{.Option "text"}} list string {{.Option "text"}}
} }
func (h {{.Option "name"}}) List(m *ice.Message, arg ...string) { func (s {{.Option "name"}}) List(m *ice.Message, arg ...string) {
h.{{.Option "type"}}.List(m, arg...) s.{{.Option "type"}}.List(m, arg...)
} }
func init() { ice.Cmd("{{.Option "key"}}", {{.Option "name"}}{}) } func init() { ice.Cmd("{{.Option "key"}}", {{.Option "name"}}{}) }

2
go.mod
View File

@ -4,6 +4,6 @@ go 1.11
require ( require (
shylinux.com/x/go-qrcode v0.0.1 shylinux.com/x/go-qrcode v0.0.1
shylinux.com/x/toolkits v0.5.4 shylinux.com/x/toolkits v0.5.5
shylinux.com/x/websocket v0.0.1 shylinux.com/x/websocket v0.0.1
) )

4
go.sum
View File

@ -1,4 +1,4 @@
shylinux.com/x/go-qrcode v0.0.1/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4ODm4po= shylinux.com/x/go-qrcode v0.0.1/go.mod h1:KAbtU+KwiiABMZ/CJ0zh9PI2AX82Uf9rRYcQ4ODm4po=
shylinux.com/x/toolkits v0.5.4 h1:Wy1qw264qEPzLYHfMhy9tmm+6+zycit75hJVxwu83cQ= shylinux.com/x/toolkits v0.5.5 h1:zbUu6jcfX6xUjzJ479VHC+zLKaSzHHjU4suICeqRCaQ=
shylinux.com/x/toolkits v0.5.4/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA= shylinux.com/x/toolkits v0.5.5/go.mod h1:8LbYHe7oxBIqb6s4MSOD+4d28QvPdvkyCVtwB/JW7AA=
shylinux.com/x/websocket v0.0.1/go.mod h1:AaSpMToOxbMULKQytzczeHPuqb708vK1vrAzCxLo/XE= shylinux.com/x/websocket v0.0.1/go.mod h1:AaSpMToOxbMULKQytzczeHPuqb708vK1vrAzCxLo/XE=