assert.gno
1.79 Kb ยท 80 lines
1package rbac
2
3import (
4 "strings"
5
6 "gno.land/p/nt/ufmt"
7
8 prbac "gno.land/p/gnoswap/rbac"
9)
10
11// assertIsOwner panics if address is not the current owner.
12func assertIsOwner(addr address) {
13 if manager.Owner() != addr {
14 panic(makeErrorWithDetails(
15 errCallerIsNotOwner,
16 ufmt.Sprintf("caller: %s", addr.String()),
17 ))
18 }
19}
20
21// assertIsPendingOwner panics if address is not the pending owner.
22func assertIsPendingOwner(addr address) {
23 if manager.PendingOwner() != addr {
24 panic(makeErrorWithDetails(
25 errCallerIsNotPendingOwner,
26 ufmt.Sprintf("caller: %s", addr.String()),
27 ))
28 }
29}
30
31// assertIsAdmin panics if address is not authorized for admin role.
32func assertIsAdmin(addr address) {
33 if !manager.IsAuthorized(prbac.ROLE_ADMIN.String(), addr) {
34 panic(
35 makeErrorWithDetails(
36 errCallerIsNotAdmin,
37 ufmt.Sprintf("caller: %s", addr.String()),
38 ),
39 )
40 }
41}
42
43// assertIsValidRoleName panics if roleName is invalid (empty or whitespace-only).
44func assertIsValidRoleName(roleName string) {
45 if strings.TrimSpace(roleName) == "" {
46 panic(makeErrorWithDetails(
47 errInvalidRoleName,
48 ufmt.Sprintf("role name: %q", roleName),
49 ))
50 }
51}
52
53func assertIsValidAddress(addr address) {
54 if !addr.IsValid() {
55 panic(makeErrorWithDetails(
56 errInvalidAddress,
57 ufmt.Sprintf("address: %s", addr.String()),
58 ))
59 }
60}
61
62func assertNotAdminRole(roleName string) {
63 if roleName == prbac.ROLE_ADMIN.String() {
64 panic(makeErrorWithDetails(
65 errAdminRoleUpdateForbidden,
66 ufmt.Sprintf("role name: %s", roleName),
67 ))
68 }
69}
70
71func assertIsAdminOrGovernance(addr address) {
72 if manager.IsAuthorized(prbac.ROLE_ADMIN.String(), addr) || manager.IsAuthorized(prbac.ROLE_GOVERNANCE.String(), addr) {
73 return
74 }
75
76 panic(makeErrorWithDetails(
77 errCallerIsNotAdminOrGovernance,
78 ufmt.Sprintf("caller: %s", addr.String()),
79 ))
80}