mirror of
https://github.com/mCaptcha/mCaptcha.git
synced 2025-03-14 13:08:27 +03:00
toekn not found and OAS: domains
This commit is contained in:
parent
e0dab001aa
commit
8ca3729dea
3 changed files with 258 additions and 3 deletions
232
openapi.yaml
232
openapi.yaml
|
@ -314,6 +314,218 @@ paths:
|
|||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
|
||||
/api/v1/mcaptcha/domain/delete:
|
||||
post:
|
||||
security:
|
||||
- cookieAuth: []
|
||||
summary: Delete domain from mcaptcha
|
||||
operationId: deleteDomain
|
||||
tags:
|
||||
- mcaptcha
|
||||
- domain
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/addDomain'
|
||||
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
'400':
|
||||
description: "Bad request: Submited URI is not a URI"
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'401':
|
||||
description: 'authentication failed'
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'500':
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
|
||||
/api/v1/mcaptcha/domain/token/add:
|
||||
post:
|
||||
security:
|
||||
- cookieAuth: []
|
||||
summary: Add token for registered domain
|
||||
operationId: addToken
|
||||
tags:
|
||||
- mcaptcha
|
||||
- domain
|
||||
- token
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MCaptchaID'
|
||||
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MCaptchaDetails'
|
||||
|
||||
'400':
|
||||
description: "Bad request: Submited URI is not a URI or duplicate token name"
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'401':
|
||||
description: 'authentication failed'
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'500':
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
|
||||
/api/v1/mcaptcha/domain/token/update:
|
||||
post:
|
||||
security:
|
||||
- cookieAuth: []
|
||||
summary: Update token key
|
||||
operationId: updateTokenKey
|
||||
tags:
|
||||
- mcaptcha
|
||||
- domain
|
||||
- token
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MCaptchaID'
|
||||
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MCaptchaDetails'
|
||||
|
||||
'400':
|
||||
description: "Bad request: Submited URI is not a URI or duplicate token name"
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'401':
|
||||
description: 'authentication failed'
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'500':
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
|
||||
|
||||
/api/v1/mcaptcha/domain/token/get:
|
||||
post:
|
||||
security:
|
||||
- cookieAuth: []
|
||||
summary: Get token key
|
||||
operationId: getTokenKey
|
||||
tags:
|
||||
- mcaptcha
|
||||
- domain
|
||||
- token
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MCaptchaID'
|
||||
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MCaptchaDetails'
|
||||
|
||||
'400':
|
||||
description: "Bad request: Submited URI is not a URI"
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'401':
|
||||
description: 'authentication failed'
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'404':
|
||||
description: token name not found
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
|
||||
'500':
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
|
||||
/api/v1/mcaptcha/domain/token/delete:
|
||||
post:
|
||||
security:
|
||||
- cookieAuth: []
|
||||
summary: Delete domain from mcaptcha
|
||||
operationId: deleteDomain
|
||||
tags:
|
||||
- mcaptcha
|
||||
- domain
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/MCaptchaID'
|
||||
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
'401':
|
||||
description: 'authentication failed'
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'500':
|
||||
description: Internal server error
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
|
||||
|
||||
|
||||
components:
|
||||
schemas:
|
||||
RegisterUser:
|
||||
|
@ -412,6 +624,26 @@ components:
|
|||
properties:
|
||||
verification_challenge:
|
||||
type: string
|
||||
MCaptchaID:
|
||||
type: object
|
||||
required:
|
||||
- name
|
||||
- domain
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
domain:
|
||||
type: string
|
||||
MCaptchaDetails:
|
||||
type: object
|
||||
required:
|
||||
- name
|
||||
- key
|
||||
properties:
|
||||
name:
|
||||
type: string
|
||||
key:
|
||||
type: string
|
||||
|
||||
securitySchemes:
|
||||
cookieAuth:
|
||||
|
|
|
@ -137,14 +137,22 @@ pub async fn get_token(
|
|||
let url = Url::parse(&payload.domain)?;
|
||||
|
||||
let host = url.host_str().ok_or(ServiceError::NotAUrl)?;
|
||||
let res = sqlx::query_as!(
|
||||
let res = match sqlx::query_as!(
|
||||
MCaptchaDetails,
|
||||
"SELECT key, name from mcaptcha_config WHERE name = $1 AND domain_name = $2",
|
||||
&payload.name,
|
||||
&host,
|
||||
)
|
||||
.fetch_one(&data.db)
|
||||
.await?;
|
||||
.await
|
||||
{
|
||||
Err(sqlx::Error::RowNotFound) => Err(ServiceError::TokenNotFound),
|
||||
Ok(m) => Ok(m),
|
||||
Err(e) => {
|
||||
let e: ServiceError = e.into();
|
||||
Err(e)
|
||||
}
|
||||
}?;
|
||||
|
||||
Ok(HttpResponse::Ok().json(res))
|
||||
}
|
||||
|
@ -265,7 +273,7 @@ mod tests {
|
|||
let cookies = get_cookie!(signin_resp);
|
||||
let mut app = get_app!(data).await;
|
||||
|
||||
let domain = MCaptchaID {
|
||||
let mut domain = MCaptchaID {
|
||||
domain: DOMAIN.into(),
|
||||
name: TOKEN_NAME.into(),
|
||||
};
|
||||
|
@ -290,5 +298,16 @@ mod tests {
|
|||
assert_eq!(get_token_resp.status(), StatusCode::OK);
|
||||
let get_token_key: MCaptchaDetails = test::read_body_json(get_token_resp).await;
|
||||
assert_eq!(get_token_key.key, updated_token.key);
|
||||
|
||||
domain.name = "https://batsense.net".into();
|
||||
|
||||
let get_nonexistent_token_resp = test::call_service(
|
||||
&mut app,
|
||||
post_request!(&domain, GET_URL)
|
||||
.cookie(cookies.clone())
|
||||
.to_request(),
|
||||
)
|
||||
.await;
|
||||
assert_eq!(get_nonexistent_token_resp.status(), StatusCode::NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -198,10 +198,14 @@ impl From<sqlx::Error> for ServiceError {
|
|||
fn from(e: sqlx::Error) -> Self {
|
||||
use sqlx::error::Error;
|
||||
use std::borrow::Cow;
|
||||
|
||||
println!("{:?}", &e);
|
||||
if let Error::Database(err) = e {
|
||||
if err.code() == Some(Cow::from("23505")) {
|
||||
return ServiceError::UsernameTaken;
|
||||
}
|
||||
|
||||
println!("{:?}", &err.code());
|
||||
}
|
||||
|
||||
ServiceError::InternalServerError
|
||||
|
|
Loading…
Add table
Reference in a new issue