service: Store the admin capability independently the user
We can acquire admin contexts independently of the user. This is mainly for a future commit that will introduce events without a user.
This commit is contained in:
parent
c031e08d71
commit
4bd600c651
@ -2433,6 +2433,7 @@ func (dc *downstreamConn) handleMessageRegistered(ctx context.Context, msg *irc.
|
|||||||
nick: dc.nick,
|
nick: dc.nick,
|
||||||
network: dc.network,
|
network: dc.network,
|
||||||
user: dc.user,
|
user: dc.user,
|
||||||
|
admin: dc.user.Admin,
|
||||||
print: func(text string) {
|
print: func(text string) {
|
||||||
sendServicePRIVMSG(dc, text)
|
sendServicePRIVMSG(dc, text)
|
||||||
},
|
},
|
||||||
|
13
service.go
13
service.go
@ -40,6 +40,7 @@ type serviceContext struct {
|
|||||||
nick string // optional
|
nick string // optional
|
||||||
network *network // optional
|
network *network // optional
|
||||||
user *user
|
user *user
|
||||||
|
admin bool
|
||||||
print func(string)
|
print func(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -137,7 +138,7 @@ func handleServiceCommand(ctx *serviceContext, words []string) {
|
|||||||
ctx.print(fmt.Sprintf(`error: %v (type "help" for a list of commands)`, err))
|
ctx.print(fmt.Sprintf(`error: %v (type "help" for a list of commands)`, err))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if cmd.admin && !ctx.user.Admin {
|
if cmd.admin && !ctx.admin {
|
||||||
ctx.print("error: you must be an admin to use this command")
|
ctx.print("error: you must be an admin to use this command")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -145,7 +146,7 @@ func handleServiceCommand(ctx *serviceContext, words []string) {
|
|||||||
if cmd.handle == nil {
|
if cmd.handle == nil {
|
||||||
if len(cmd.children) > 0 {
|
if len(cmd.children) > 0 {
|
||||||
var l []string
|
var l []string
|
||||||
appendServiceCommandSetHelp(cmd.children, words, ctx.user.Admin, &l)
|
appendServiceCommandSetHelp(cmd.children, words, ctx.admin, &l)
|
||||||
ctx.print("available commands: " + strings.Join(l, ", "))
|
ctx.print("available commands: " + strings.Join(l, ", "))
|
||||||
} else {
|
} else {
|
||||||
// Pretend the command does not exist if it has neither children nor handler.
|
// Pretend the command does not exist if it has neither children nor handler.
|
||||||
@ -365,7 +366,7 @@ func handleServiceHelp(ctx *serviceContext, params []string) error {
|
|||||||
|
|
||||||
if len(cmd.children) > 0 {
|
if len(cmd.children) > 0 {
|
||||||
var l []string
|
var l []string
|
||||||
appendServiceCommandSetHelp(cmd.children, words, ctx.user.Admin, &l)
|
appendServiceCommandSetHelp(cmd.children, words, ctx.admin, &l)
|
||||||
ctx.print("available commands: " + strings.Join(l, ", "))
|
ctx.print("available commands: " + strings.Join(l, ", "))
|
||||||
} else {
|
} else {
|
||||||
text := strings.Join(words, " ")
|
text := strings.Join(words, " ")
|
||||||
@ -378,7 +379,7 @@ func handleServiceHelp(ctx *serviceContext, params []string) error {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
var l []string
|
var l []string
|
||||||
appendServiceCommandSetHelp(serviceCommands, nil, ctx.user.Admin, &l)
|
appendServiceCommandSetHelp(serviceCommands, nil, ctx.admin, &l)
|
||||||
ctx.print("available commands: " + strings.Join(l, ", "))
|
ctx.print("available commands: " + strings.Join(l, ", "))
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
@ -999,7 +1000,7 @@ func handleUserUpdate(ctx *serviceContext, params []string) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if username != "" && username != ctx.user.Username {
|
if username != "" && username != ctx.user.Username {
|
||||||
if !ctx.user.Admin {
|
if !ctx.admin {
|
||||||
return fmt.Errorf("you must be an admin to update other users")
|
return fmt.Errorf("you must be an admin to update other users")
|
||||||
}
|
}
|
||||||
if nick != nil {
|
if nick != nil {
|
||||||
@ -1092,7 +1093,7 @@ func handleUserDelete(ctx *serviceContext, params []string) error {
|
|||||||
|
|
||||||
self := ctx.user.Username == username
|
self := ctx.user.Username == username
|
||||||
|
|
||||||
if !ctx.user.Admin && !self {
|
if !ctx.admin && !self {
|
||||||
return fmt.Errorf("only admins may delete other users")
|
return fmt.Errorf("only admins may delete other users")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
1
user.go
1
user.go
@ -811,6 +811,7 @@ func (u *user) run() {
|
|||||||
handleServiceCommand(&serviceContext{
|
handleServiceCommand(&serviceContext{
|
||||||
Context: ctx,
|
Context: ctx,
|
||||||
user: u,
|
user: u,
|
||||||
|
admin: u.Admin,
|
||||||
print: func(text string) {
|
print: func(text string) {
|
||||||
// Avoid blocking on e.print in case our context is canceled.
|
// Avoid blocking on e.print in case our context is canceled.
|
||||||
// This is a no-op right now because we use context.TODO(),
|
// This is a no-op right now because we use context.TODO(),
|
||||||
|
Loading…
Reference in New Issue
Block a user