implemented simple ssh dual control
This commit is contained in:
parent
690613cab8
commit
60012be942
12 changed files with 446 additions and 20 deletions
|
|
@ -157,3 +157,57 @@ func reqHandler(ctx *types.Context) {
|
|||
}
|
||||
ctx.OK()
|
||||
}
|
||||
|
||||
func accessHandler(ctx *types.Context) {
|
||||
host := ctx.Var("host")
|
||||
user := ctx.Var("user")
|
||||
ip := ctx.ClientIP()
|
||||
ssh := ctx.SSH()
|
||||
aid := ctx.Var("aid")
|
||||
var err error
|
||||
if aid == "" {
|
||||
aid, err = ssh.New(host, user, ip)
|
||||
if err != nil {
|
||||
ctx.Log.Error(err, "error creating access", "host", host, "user", user)
|
||||
ctx.Err(types.ErrTooManyApprovals)
|
||||
return
|
||||
}
|
||||
ctx.Redirect(schema.AccessURL(host, user, aid), http.StatusFound)
|
||||
return
|
||||
}
|
||||
s := ssh.Status(aid, host, user, ip)
|
||||
switch s {
|
||||
case types.Pending:
|
||||
ctx.Redirect(schema.AccessURL(host, user, aid), http.StatusFound)
|
||||
return
|
||||
case types.Rejected:
|
||||
ctx.Err(types.ErrAccessRequestRejected)
|
||||
return
|
||||
case types.NotFound:
|
||||
ctx.Err(types.ErrAccessReqNotFound)
|
||||
return
|
||||
}
|
||||
ctx.JSON(true)
|
||||
}
|
||||
func accessReqHandler(ctx *types.Context) {
|
||||
id := ctx.Var("id")
|
||||
status := types.Pending
|
||||
switch ctx.Method() {
|
||||
case "PUT":
|
||||
status = types.Approved
|
||||
case "DELETE":
|
||||
status = types.Rejected
|
||||
}
|
||||
err := ctx.SSH().Update(id, status)
|
||||
if err != nil {
|
||||
ctx.Log.Error(err, "error updating ssh request")
|
||||
ctx.Err(types.ErrAccessReqNotFound)
|
||||
return
|
||||
}
|
||||
ctx.OK()
|
||||
}
|
||||
|
||||
func accessListHandler(ctx *types.Context) {
|
||||
l := ctx.SSH().List()
|
||||
ctx.JSON(schema.NewAccessList(l))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,9 +9,12 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
keyID = schema.KeyPath + core.IDRoute
|
||||
keyReqID = schema.KeyPath + core.IDRoute + core.AIDRoute
|
||||
reqID = schema.ReqPath + core.IDRoute
|
||||
keyID = schema.KeyPath + core.IDRoute
|
||||
keyReqID = schema.KeyPath + core.IDRoute + core.AIDRoute
|
||||
reqID = schema.ReqPath + core.IDRoute
|
||||
accessID = schema.AccessPath + core.IDRoute
|
||||
access = schema.AccessPath + core.HostRoute + core.UserRoute
|
||||
accessAID = schema.AccessPath + core.HostRoute + core.UserRoute + core.AIDRoute
|
||||
)
|
||||
|
||||
var Routes = []types.Route{
|
||||
|
|
@ -50,4 +53,25 @@ var Routes = []types.Route{
|
|||
Handler: local(reqHandler),
|
||||
Methods: []string{"PUT", "DELETE"},
|
||||
},
|
||||
// SSH
|
||||
{
|
||||
Path: accessID,
|
||||
Handler: local(accessReqHandler),
|
||||
Methods: []string{"PUT", "DELETE"},
|
||||
},
|
||||
{
|
||||
Path: schema.AccessPath,
|
||||
Handler: local(accessListHandler),
|
||||
Methods: []string{"GET"},
|
||||
},
|
||||
{
|
||||
Path: access,
|
||||
Handler: accessHandler,
|
||||
Methods: []string{"GET"},
|
||||
},
|
||||
{
|
||||
Path: accessAID,
|
||||
Handler: accessHandler,
|
||||
Methods: []string{"GET"},
|
||||
},
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue