Skip to content

Commit b8cebf8

Browse files
authored
Merge pull request #35 from afbase/afbase/add_normalize_and_validate_handle
adding normalize_and_validate_handle in place of TODOs
2 parents db69f68 + c5b649c commit b8cebf8

File tree

3 files changed

+52
-26
lines changed

3 files changed

+52
-26
lines changed

rsky-pds/src/apis/com/atproto/admin/update_account_handle.rs

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ use crate::account_manager::AccountManager;
33
use crate::apis::com::atproto::server::get_keys_from_private_key_str;
44
use crate::auth_verifier::AdminToken;
55
use crate::common::env::env_str;
6+
use crate::config::ServerConfig;
7+
use crate::handle::{normalize_and_validate_handle, HandleValidationContext, HandleValidationOpts};
68
use crate::models::{ErrorCode, ErrorMessageResponse};
7-
use crate::{plc, SharedSequencer};
9+
use crate::{plc, SharedIdResolver, SharedSequencer};
810
use anyhow::{bail, Result};
911
use rocket::http::Status;
1012
use rocket::response::status;
@@ -16,9 +18,22 @@ use std::env;
1618
async fn inner_update_account_handle(
1719
body: Json<UpdateAccountHandleInput>,
1820
sequencer: &State<SharedSequencer>,
21+
server_config: &State<ServerConfig>,
22+
id_resolver: &State<SharedIdResolver>,
1923
) -> Result<()> {
2024
let UpdateAccountHandleInput { did, handle } = body.into_inner();
21-
// @TODO: Implement normalizeAndValidateHandle()
25+
26+
let opts = HandleValidationOpts {
27+
handle,
28+
did: Some(did.clone()),
29+
allow_reserved: None,
30+
};
31+
let validation_ctx = HandleValidationContext {
32+
server_config,
33+
id_resolver,
34+
};
35+
let handle = normalize_and_validate_handle(opts, validation_ctx).await?;
36+
2237
let account = AccountManager::get_account(
2338
&handle,
2439
Some(AvailabilityFlags {
@@ -58,9 +73,11 @@ async fn inner_update_account_handle(
5873
pub async fn update_account_handle(
5974
body: Json<UpdateAccountHandleInput>,
6075
sequencer: &State<SharedSequencer>,
76+
server_config: &State<ServerConfig>,
77+
id_resolver: &State<SharedIdResolver>,
6178
_auth: AdminToken,
6279
) -> Result<(), status::Custom<Json<ErrorMessageResponse>>> {
63-
match inner_update_account_handle(body, sequencer).await {
80+
match inner_update_account_handle(body, sequencer, server_config, id_resolver).await {
6481
Ok(_) => Ok(()),
6582
Err(error) => {
6683
eprintln!("@LOG: ERROR: {error}");

rsky-pds/src/apis/com/atproto/identity/update_handle.rs

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,16 @@ async fn inner_update_handle(
2525
let UpdateHandleInput { handle } = body.into_inner();
2626
let requester = auth.access.credentials.unwrap().did.unwrap();
2727

28-
// Use the new normalize and validate function
28+
let opts = HandleValidationOpts {
29+
handle,
30+
did: Some(requester.clone()),
31+
allow_reserved: None,
32+
};
2933
let validation_ctx = HandleValidationContext {
3034
server_config,
3135
id_resolver,
3236
};
33-
let handle = normalize_and_validate_handle(
34-
HandleValidationOpts {
35-
handle,
36-
did: Some(requester.clone()),
37-
allow_reserved: None,
38-
},
39-
validation_ctx,
40-
)
41-
.await?;
37+
let handle = normalize_and_validate_handle(opts, validation_ctx).await?;
4238

4339
let account = AccountManager::get_account(
4440
&handle,

rsky-pds/src/apis/com/atproto/server/create_account.rs

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use crate::account_manager::{AccountManager, CreateAccountOpts};
33
use crate::apis::com::atproto::server::safe_resolve_did_doc;
44
use crate::auth_verifier::UserDidAuthOptional;
55
use crate::config::ServerConfig;
6+
use crate::handle::{normalize_and_validate_handle, HandleValidationContext, HandleValidationOpts};
67
use crate::models::{ErrorCode, ErrorMessageResponse};
78
use crate::repo::aws::s3::S3BlobStore;
89
use crate::repo::ActorStore;
@@ -116,17 +117,19 @@ pub async fn server_create_account(
116117
Some(access) if access.credentials.is_some() => access.credentials.unwrap().iss,
117118
_ => None,
118119
};
119-
let input = match validate_inputs_for_local_pds(cfg, body.clone().into_inner(), requester).await
120-
{
121-
Ok(res) => res,
122-
Err(e) => {
123-
let internal_error = ErrorMessageResponse {
124-
code: Some(ErrorCode::BadRequest),
125-
message: Some(e.to_string()),
126-
};
127-
return Err(status::Custom(Status::BadRequest, Json(internal_error)));
128-
}
129-
};
120+
let input =
121+
match validate_inputs_for_local_pds(cfg, id_resolver, body.clone().into_inner(), requester)
122+
.await
123+
{
124+
Ok(res) => res,
125+
Err(e) => {
126+
let internal_error = ErrorMessageResponse {
127+
code: Some(ErrorCode::BadRequest),
128+
message: Some(e.to_string()),
129+
};
130+
return Err(status::Custom(Status::BadRequest, Json(internal_error)));
131+
}
132+
};
130133

131134
match inner_server_create_account(input, sequencer, s3_config, id_resolver).await {
132135
Ok(response) => Ok(Json(response)),
@@ -146,8 +149,9 @@ pub async fn server_create_account(
146149

147150
pub async fn validate_inputs_for_local_pds(
148151
cfg: &State<ServerConfig>,
152+
id_resolver: &State<SharedIdResolver>,
149153
input: CreateAccountInput,
150-
_requester: Option<String>,
154+
requester: Option<String>,
151155
) -> Result<CreateAccountInput> {
152156
let CreateAccountInput {
153157
email,
@@ -183,7 +187,16 @@ pub async fn validate_inputs_for_local_pds(
183187
if did.is_some() {
184188
bail!("Not yet allowing people to bring their own DID");
185189
};
186-
// @TODO: Normalize handle as well
190+
let opts = HandleValidationOpts {
191+
handle: handle.clone(),
192+
did: requester.clone(),
193+
allow_reserved: None,
194+
};
195+
let validation_ctx = HandleValidationContext {
196+
server_config: cfg,
197+
id_resolver,
198+
};
199+
let handle = normalize_and_validate_handle(opts, validation_ctx).await?;
187200
if !super::validate_handle(&handle) {
188201
bail!("Invalid handle");
189202
};

0 commit comments

Comments
 (0)