Skip to content

Commit 5bdc49e

Browse files
smartcontract: add Permission account support to CLI and SDKs
1 parent eb32572 commit 5bdc49e

44 files changed

Lines changed: 2634 additions & 6 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

client/doublezero/src/cli/command.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ use crate::{
44
accesspass::AccessPassCliCommand, config::ConfigCliCommand,
55
contributor::ContributorCliCommand, device::DeviceCliCommand, exchange::ExchangeCliCommand,
66
globalconfig::GlobalConfigCliCommand, link::LinkCliCommand, location::LocationCliCommand,
7-
resource::ResourceCliCommand, tenant::TenantCliCommand, user::UserCliCommand,
7+
permission::PermissionCliCommand, resource::ResourceCliCommand, tenant::TenantCliCommand,
8+
user::UserCliCommand,
89
},
910
command::{
1011
connect::ProvisioningCliCommand, disable::DisableCliCommand,
@@ -74,6 +75,9 @@ pub enum Command {
7475
/// Manage contributors
7576
#[command()]
7677
Contributor(ContributorCliCommand),
78+
/// Manage permissions
79+
#[clap()]
80+
Permission(PermissionCliCommand),
7781
/// Manage tenants
7882
#[command()]
7983
Tenant(TenantCliCommand),

client/doublezero/src/cli/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ pub mod link;
99
pub mod location;
1010
pub mod multicast;
1111
pub mod multicastgroup;
12+
pub mod permission;
1213
pub mod resource;
1314
pub mod tenant;
1415
pub mod user;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use clap::{Args, Subcommand};
2+
3+
use doublezero_cli::permission::{delete::*, get::*, list::*, resume::*, set::*, suspend::*};
4+
5+
#[derive(Args, Debug)]
6+
pub struct PermissionCliCommand {
7+
#[command(subcommand)]
8+
pub command: PermissionCommands,
9+
}
10+
11+
#[derive(Debug, Subcommand)]
12+
pub enum PermissionCommands {
13+
/// Create or update a permission account for a pubkey
14+
#[clap()]
15+
Set(SetPermissionCliCommand),
16+
/// Suspend a permission (disables authorization)
17+
#[clap()]
18+
Suspend(SuspendPermissionCliCommand),
19+
/// Resume a suspended permission
20+
#[clap()]
21+
Resume(ResumePermissionCliCommand),
22+
/// Delete a permission account
23+
#[clap()]
24+
Delete(DeletePermissionCliCommand),
25+
/// Get details for a permission account
26+
#[clap()]
27+
Get(GetPermissionCliCommand),
28+
/// List all permission accounts
29+
#[clap()]
30+
List(ListPermissionCliCommand),
31+
}

client/doublezero/src/main.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,16 @@ async fn main() -> eyre::Result<()> {
178178
args.execute(&client, &mut handle)
179179
}
180180
},
181+
Command::Permission(command) => match command.command {
182+
cli::permission::PermissionCommands::Set(args) => args.execute(&client, &mut handle),
183+
cli::permission::PermissionCommands::Suspend(args) => {
184+
args.execute(&client, &mut handle)
185+
}
186+
cli::permission::PermissionCommands::Resume(args) => args.execute(&client, &mut handle),
187+
cli::permission::PermissionCommands::Delete(args) => args.execute(&client, &mut handle),
188+
cli::permission::PermissionCommands::Get(args) => args.execute(&client, &mut handle),
189+
cli::permission::PermissionCommands::List(args) => args.execute(&client, &mut handle),
190+
},
181191
Command::Tenant(command) => match command.command {
182192
cli::tenant::TenantCommands::Create(args) => args.execute(&client, &mut handle),
183193
cli::tenant::TenantCommands::Update(args) => args.execute(&client, &mut handle),

controlplane/doublezero-admin/src/cli/command.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use super::multicast::MulticastCliCommand;
22
use crate::cli::{
33
accesspass::AccessPassCliCommand, config::ConfigCliCommand, contributor::ContributorCliCommand,
44
device::DeviceCliCommand, exchange::ExchangeCliCommand, globalconfig::GlobalConfigCliCommand,
5-
link::LinkCliCommand, location::LocationCliCommand, tenant::TenantCliCommand,
6-
user::UserCliCommand,
5+
link::LinkCliCommand, location::LocationCliCommand, permission::PermissionCliCommand,
6+
tenant::TenantCliCommand, user::UserCliCommand,
77
};
88
use clap::{Args, Subcommand};
99
use clap_complete::Shell;
@@ -57,6 +57,9 @@ pub enum Command {
5757
#[command()]
5858
AccessPass(AccessPassCliCommand),
5959

60+
/// Manage permission accounts
61+
#[command()]
62+
Permission(PermissionCliCommand),
6063
/// Manage users
6164
#[command()]
6265
User(UserCliCommand),

controlplane/doublezero-admin/src/cli/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,6 @@ pub mod link;
99
pub mod location;
1010
pub mod multicast;
1111
pub mod multicastgroup;
12+
pub mod permission;
1213
pub mod tenant;
1314
pub mod user;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
use clap::{Args, Subcommand};
2+
3+
use doublezero_cli::permission::{delete::*, get::*, list::*, resume::*, set::*, suspend::*};
4+
5+
#[derive(Args, Debug)]
6+
pub struct PermissionCliCommand {
7+
#[command(subcommand)]
8+
pub command: PermissionCommands,
9+
}
10+
11+
#[derive(Debug, Subcommand)]
12+
pub enum PermissionCommands {
13+
/// Create or update a permission account for a pubkey
14+
#[clap()]
15+
Set(SetPermissionCliCommand),
16+
/// Suspend a permission (disables authorization)
17+
#[clap()]
18+
Suspend(SuspendPermissionCliCommand),
19+
/// Resume a suspended permission
20+
#[clap()]
21+
Resume(ResumePermissionCliCommand),
22+
/// Delete a permission account
23+
#[clap()]
24+
Delete(DeletePermissionCliCommand),
25+
/// Get details for a permission account
26+
#[clap()]
27+
Get(GetPermissionCliCommand),
28+
/// List all permission accounts
29+
#[clap()]
30+
List(ListPermissionCliCommand),
31+
}

controlplane/doublezero-admin/src/main.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use crate::cli::{
1313
},
1414
link::LinkCommands,
1515
location::LocationCommands,
16+
permission::PermissionCommands,
1617
tenant::TenantCommands,
1718
user::UserCommands,
1819
};
@@ -172,6 +173,14 @@ async fn main() -> eyre::Result<()> {
172173
args.execute(&client, &mut handle, &mut std::io::stdin().lock())
173174
}
174175
},
176+
Command::Permission(command) => match command.command {
177+
PermissionCommands::Set(args) => args.execute(&client, &mut handle),
178+
PermissionCommands::Suspend(args) => args.execute(&client, &mut handle),
179+
PermissionCommands::Resume(args) => args.execute(&client, &mut handle),
180+
PermissionCommands::Delete(args) => args.execute(&client, &mut handle),
181+
PermissionCommands::Get(args) => args.execute(&client, &mut handle),
182+
PermissionCommands::List(args) => args.execute(&client, &mut handle),
183+
},
175184
Command::User(command) => match command.command {
176185
UserCommands::Create(args) => args.execute(&client, &mut handle),
177186
UserCommands::CreateSubscribe(args) => args.execute(&client, &mut handle),

sdk/serviceability/go/client.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type ProgramData struct {
2828
ProgramConfig *ProgramConfig
2929
AccessPasses []AccessPass
3030
ResourceExtensions []ResourceExtension
31+
Permissions []Permission
3132
}
3233

3334
// ProgramDataProvider is an interface for types that can provide program data.
@@ -138,6 +139,7 @@ func (c *Client) GetProgramData(ctx context.Context) (*ProgramData, error) {
138139
MulticastGroups: []MulticastGroup{},
139140
AccessPasses: []AccessPass{},
140141
ResourceExtensions: []ResourceExtension{},
142+
Permissions: []Permission{},
141143
}
142144

143145
for _, element := range out {
@@ -212,6 +214,11 @@ func (c *Client) GetProgramData(ctx context.Context) (*ProgramData, error) {
212214
DeserializeTenant(reader, &tenant)
213215
tenant.PubKey = element.Pubkey
214216
pd.Tenants = append(pd.Tenants, tenant)
217+
case PermissionType:
218+
var perm Permission
219+
DeserializePermission(reader, &perm)
220+
perm.PubKey = element.Pubkey
221+
pd.Permissions = append(pd.Permissions, perm)
215222
}
216223
}
217224

sdk/serviceability/go/deserialize.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,17 @@ func DeserializeResourceExtension(reader *ByteReader, ext *ResourceExtension) {
311311
}
312312
}
313313

314+
func DeserializePermission(reader *ByteReader, perm *Permission) {
315+
perm.AccountType = AccountType(reader.ReadU8())
316+
perm.Owner = reader.ReadPubkey()
317+
perm.BumpSeed = reader.ReadU8()
318+
perm.Status = PermissionStatus(reader.ReadU8())
319+
perm.UserPayer = reader.ReadPubkey()
320+
u128 := reader.ReadU128()
321+
perm.PermissionsLo = u128.Low
322+
perm.PermissionsHi = u128.High
323+
}
324+
314325
func DeserializeTenant(reader *ByteReader, tenant *Tenant) {
315326
tenant.AccountType = AccountType(reader.ReadU8())
316327
tenant.Owner = reader.ReadPubkey()

0 commit comments

Comments
 (0)