sol_cerberus/
lib.rs

1use anchor_lang::prelude::*;
2pub use constants::*;
3use errors::*;
4use instructions::*;
5pub use sol_cerberus_macros;
6use state::*;
7
8pub mod constants;
9pub mod errors;
10pub mod instructions;
11pub mod state;
12pub mod utils;
13
14declare_id!("SCERbrcgSPwgkrJ7j4TABr17dhYzdgiwPZUSSfFPt8x");
15
16#[program]
17pub mod sol_cerberus {
18
19    use super::*;
20
21    pub fn initialize_app(ctx: Context<InitializeApp>, app_data: AppData) -> Result<()> {
22        instructions::initialize_app::initialize_app(ctx, app_data)
23    }
24
25    pub fn update_app(ctx: Context<UpdateApp>, app_data: UpdateAppData) -> Result<()> {
26        instructions::update_app::update_app(ctx, app_data)
27    }
28
29    pub fn delete_app(ctx: Context<DeleteApp>) -> Result<()> {
30        instructions::delete_app::delete_app(ctx)
31    }
32
33    pub fn add_rule(ctx: Context<AddRule>, rule_data: RuleData) -> Result<()> {
34        instructions::add_rule::add_rule(ctx, rule_data)
35    }
36
37    pub fn delete_rule(ctx: Context<DeleteRule>) -> Result<()> {
38        instructions::delete_rule::delete_rule(ctx)
39    }
40
41    pub fn assign_role(ctx: Context<AssignRole>, assign_role_data: AssignRoleData) -> Result<()> {
42        instructions::assign_role::assign_role(ctx, assign_role_data)
43    }
44
45    pub fn delete_assigned_role(ctx: Context<DeleteAssignedRole>) -> Result<()> {
46        instructions::delete_assigned_role::delete_assigned_role(ctx)
47    }
48
49    /**
50     * Updates either app.roles_updated_at or app.rules_updated_at fields, so clients
51     * can keep track and cache roles & rules accordingly.
52     */
53    pub fn update_cache(ctx: Context<UpdateCache>, cache_updated: u8) -> Result<()> {
54        instructions::update_cache::update_cache(ctx, cache_updated)
55    }
56
57    /**
58     * Checks if the current user is authorized to run the instruction,
59     * throwing "Unauthorized" error otherwise.
60     */
61    pub fn allowed(ctx: Context<Allowed>, allowed_rule: AllowedRule) -> Result<()> {
62        instructions::allowed::allowed(
63            &ctx.accounts.signer,
64            &ctx.accounts.sol_cerberus_app,
65            &ctx.accounts.sol_cerberus_role,
66            &ctx.accounts.sol_cerberus_rule,
67            &ctx.accounts.sol_cerberus_token,
68            &ctx.accounts.sol_cerberus_metadata,
69            &mut ctx.accounts.sol_cerberus_seed,
70            &ctx.accounts.system_program,
71            allowed_rule,
72        )
73    }
74}