Handle reservation for sub authority
This commit is contained in:
parent
0ac8398979
commit
332fa8da37
@ -4,6 +4,7 @@ import (
|
|||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"cosmossdk.io/collections"
|
"cosmossdk.io/collections"
|
||||||
errorsmod "cosmossdk.io/errors"
|
errorsmod "cosmossdk.io/errors"
|
||||||
@ -185,10 +186,9 @@ func (k Keeper) ReserveAuthority(ctx sdk.Context, msg registrytypes.MsgReserveAu
|
|||||||
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid name")
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Invalid name")
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO
|
if strings.Contains(name, ".") {
|
||||||
// if strings.Contains(name, ".") {
|
return k.ReserveSubAuthority(ctx, name, msg)
|
||||||
// return k.ProcessReserveSubAuthority(ctx, name, msg)
|
}
|
||||||
// }
|
|
||||||
|
|
||||||
err = k.createAuthority(ctx, name, msg.GetSigner(), true)
|
err = k.createAuthority(ctx, name, msg.GetSigner(), true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -198,6 +198,45 @@ func (k Keeper) ReserveAuthority(ctx sdk.Context, msg registrytypes.MsgReserveAu
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ReserveSubAuthority reserves a sub-authority.
|
||||||
|
func (k Keeper) ReserveSubAuthority(ctx sdk.Context, name string, msg registrytypes.MsgReserveAuthority) error {
|
||||||
|
// Get parent authority name.
|
||||||
|
names := strings.Split(name, ".")
|
||||||
|
parent := strings.Join(names[1:], ".")
|
||||||
|
|
||||||
|
// Check if parent authority exists.
|
||||||
|
if has, err := k.HasNameAuthority(ctx, parent); !has {
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "Parent authority not found.")
|
||||||
|
}
|
||||||
|
parentAuthority, err := k.GetNameAuthority(ctx, parent)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sub-authority creator needs to be the owner of the parent authority.
|
||||||
|
if parentAuthority.OwnerAddress != msg.Signer {
|
||||||
|
return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "Access denied.")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sub-authority owner defaults to parent authority owner.
|
||||||
|
subAuthorityOwner := msg.Signer
|
||||||
|
if len(msg.Owner) != 0 {
|
||||||
|
// Override sub-authority owner if provided in message.
|
||||||
|
subAuthorityOwner = msg.Owner
|
||||||
|
}
|
||||||
|
|
||||||
|
sdkErr := k.createAuthority(ctx, name, subAuthorityOwner, false)
|
||||||
|
if sdkErr != nil {
|
||||||
|
return sdkErr
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (k Keeper) createAuthority(ctx sdk.Context, name string, owner string, isRoot bool) error {
|
func (k Keeper) createAuthority(ctx sdk.Context, name string, owner string, isRoot bool) error {
|
||||||
moduleParams, err := k.GetParams(ctx)
|
moduleParams, err := k.GetParams(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user