1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
use Parser;
/// Configuration for connecting to a SpiceDB instance.
///
/// `SpiceDbConfig` contains the necessary connection parameters for establishing
/// a gRPC connection to SpiceDB. It supports configuration via environment variables
/// or command-line arguments using `clap`.
///
/// # Configuration Methods
///
/// You can configure SpiceDB connection in three ways:
///
/// 1. **Directly in code** - Create the struct manually
/// 2. **Environment variables** - Set `SPICEDB_ENDPOINT` and `SPICEDB_TOKEN`
/// 3. **Command-line arguments** - Use `--spicedb-endpoint` and `--spicedb-token`
///
/// # Examples
///
/// ## Manual configuration
///
/// ```
/// use authz::SpiceDbConfig;
///
/// let config = SpiceDbConfig {
/// endpoint: "localhost:50051".to_string(),
/// token: Some("your-preshared-key".to_string()),
/// };
/// ```
///
/// ## From environment variables
///
/// ```bash
/// export SPICEDB_ENDPOINT="grpc.authzed.com:443"
/// export SPICEDB_TOKEN="your-preshared-key"
/// ```
///
/// ```no_run
/// use authz::SpiceDbConfig;
/// use clap::Parser;
///
/// let config = SpiceDbConfig::parse();
/// ```
///
/// ## From command-line arguments
///
/// ```bash
/// cargo run -- --spicedb-endpoint localhost:50051 --spicedb-token mykey
/// ```
///
/// # Security Note
///
/// The `token` field contains a sensitive preshared key. Ensure it is:
/// - Never hardcoded in version control
/// - Stored securely (e.g., environment variables, secrets manager)
/// - Transmitted only over secure connections (TLS/SSL)