Added arn to the main repository
This commit is contained in:
84
arn/Lockable.go
Normal file
84
arn/Lockable.go
Normal file
@ -0,0 +1,84 @@
|
||||
package arn
|
||||
|
||||
import (
|
||||
"errors"
|
||||
|
||||
"github.com/aerogo/aero"
|
||||
"github.com/aerogo/api"
|
||||
)
|
||||
|
||||
// Lockable ...
|
||||
type Lockable interface {
|
||||
Lock(userID UserID)
|
||||
Unlock(userID UserID)
|
||||
IsLocked() bool
|
||||
Save()
|
||||
}
|
||||
|
||||
// LockEventReceiver ...
|
||||
type LockEventReceiver interface {
|
||||
OnLock(user *User)
|
||||
OnUnlock(user *User)
|
||||
}
|
||||
|
||||
// LockAction ...
|
||||
func LockAction() *api.Action {
|
||||
return &api.Action{
|
||||
Name: "lock",
|
||||
Route: "/lock",
|
||||
Run: func(obj interface{}, ctx aero.Context) error {
|
||||
lockable := obj.(Lockable)
|
||||
user := GetUserFromContext(ctx)
|
||||
|
||||
if user == nil {
|
||||
return errors.New("Not logged in")
|
||||
}
|
||||
|
||||
lockable.Lock(user.ID)
|
||||
|
||||
// Call OnLock if the object implements it
|
||||
receiver, ok := lockable.(LockEventReceiver)
|
||||
|
||||
if ok {
|
||||
receiver.OnLock(user)
|
||||
}
|
||||
|
||||
lockable.Save()
|
||||
return nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// UnlockAction ...
|
||||
func UnlockAction() *api.Action {
|
||||
return &api.Action{
|
||||
Name: "unlock",
|
||||
Route: "/unlock",
|
||||
Run: func(obj interface{}, ctx aero.Context) error {
|
||||
lockable := obj.(Lockable)
|
||||
user := GetUserFromContext(ctx)
|
||||
|
||||
if user == nil {
|
||||
return errors.New("Not logged in")
|
||||
}
|
||||
|
||||
lockable.Unlock(user.ID)
|
||||
|
||||
// Call OnUnlock if the object implements it
|
||||
receiver, ok := lockable.(LockEventReceiver)
|
||||
|
||||
if ok {
|
||||
receiver.OnUnlock(user)
|
||||
}
|
||||
|
||||
lockable.Save()
|
||||
return nil
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// IsLocked returns true if the given object is locked.
|
||||
func IsLocked(obj interface{}) bool {
|
||||
lockable, isLockable := obj.(Lockable)
|
||||
return isLockable && lockable.IsLocked()
|
||||
}
|
Reference in New Issue
Block a user