@@ -11,6 +11,7 @@ use native_model::Model;
1111use pem:: Pem ;
1212use pem:: encode;
1313use sandpolis_core:: { RealmName , UserName } ;
14+ use sandpolis_database:: RealmDatabase ;
1415use sandpolis_database:: ResidentVec ;
1516use sandpolis_database:: { DatabaseLayer , Resident } ;
1617use sandpolis_instance:: InstanceLayer ;
@@ -35,8 +36,9 @@ pub struct RealmLayerData {
3536
3637#[ derive( Clone ) ]
3738pub struct RealmLayer {
39+ database : DatabaseLayer ,
3840 data : Resident < RealmLayerData > ,
39- realms : ResidentVec < RealmData > ,
41+ pub realms : ResidentVec < RealmData > ,
4042}
4143
4244impl RealmLayer {
@@ -53,16 +55,15 @@ impl RealmLayer {
5355
5456 #[ cfg( feature = "server" ) ]
5557 {
56- let cluster_cert = RealmClusterCert :: new (
57- instance_layer. data . value ( ) . cluster_id ,
58- RealmName :: default ( ) ,
59- ) ?;
60- let server_cert = cluster_cert. server_cert ( instance_layer. data . value ( ) . instance_id ) ?;
61-
62- let rw = realm_db. rw_transaction ( ) ?;
63- rw. insert ( cluster_cert) ?;
64- rw. insert ( server_cert) ?;
65- rw. commit ( ) ?;
58+ // let cluster_cert =
59+ // RealmClusterCert::new(instance.data.value().cluster_id,
60+ // RealmName::default())?; let server_cert =
61+ // cluster_cert.server_cert(instance.data.value().instance_id)?;
62+
63+ // let rw = realm_db.rw_transaction()?;
64+ // rw.insert(cluster_cert)?;
65+ // rw.insert(server_cert)?;
66+ // rw.commit()?;
6667 }
6768
6869 // Update client cert if possible
@@ -82,10 +83,21 @@ impl RealmLayer {
8283 // }
8384
8485 Ok ( Self {
86+ database,
8587 data : default_realm. resident ( ( ) ) ?,
8688 realms,
8789 } )
8890 }
91+
92+ pub async fn realm ( & self , name : RealmName ) -> Result < RealmDatabase > {
93+ // Don't allow this method to create realms that don't already exist
94+ for realm in self . realms . iter ( ) . await {
95+ if realm. read ( ) . await . name == name {
96+ return Ok ( self . database . realm ( name) . await ?) ;
97+ }
98+ }
99+ bail ! ( "Realm does not exist" ) ;
100+ }
89101}
90102
91103/// A realm is a set of clients and agents that can interact. Each realm has a
@@ -110,7 +122,7 @@ pub struct RealmClusterCert {
110122}
111123
112124/// Each server in the cluster gets its own server certificate.
113- #[ data]
125+ #[ data( instance ) ]
114126pub struct RealmServerCert {
115127 pub cert : Vec < u8 > ,
116128 pub key : Option < Vec < u8 > > ,
@@ -250,17 +262,17 @@ impl RealmClientCert {
250262
251263#[ cfg( test) ]
252264mod test_client_cert {
253- use super :: RealmClientCert ;
265+ use super :: * ;
254266
255267 #[ test]
256268 fn test_read_write ( ) -> Result < ( ) > {
257269 let mut temp_file = tempfile:: NamedTempFile :: new ( ) ?;
258270
259271 let cert = RealmClientCert {
260- ca : "doesn't have to be a valid cert" . bytes ( ) ,
261- cert : "doesn't have to be a valid cert" . bytes ( ) ,
262- key : Some ( "doesn't have to be a valid key" . bytes ( ) ) ,
263- _id : 0 ,
272+ ca : "doesn't have to be a valid cert" . as_bytes ( ) . to_vec ( ) ,
273+ cert : "doesn't have to be a valid cert" . as_bytes ( ) . to_vec ( ) ,
274+ key : Some ( "doesn't have to be a valid key" . as_bytes ( ) . to_vec ( ) ) ,
275+ .. Default :: default ( )
264276 } ;
265277
266278 cert. write ( temp_file. path ( ) ) ?;
0 commit comments