[frontend] Add openapi generator and annotate OpenAPI in backend
This commit is contained in:
parent
cb9e8e0136
commit
87a315f340
5
kibicara-frontend/package-lock.json
generated
5
kibicara-frontend/package-lock.json
generated
|
@ -1623,6 +1623,11 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@openapitools/openapi-generator-cli": {
|
||||||
|
"version": "1.0.15-4.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@openapitools/openapi-generator-cli/-/openapi-generator-cli-1.0.15-4.3.1.tgz",
|
||||||
|
"integrity": "sha512-U+sanspDmeBElVNjYHQ4U7BbSEJUQzjNKmiTzXpcEw/r93sgxmzS2Sew5t+Zj6kyN1YTvjhRjJikNcW9/bmTKA=="
|
||||||
|
},
|
||||||
"@schematics/angular": {
|
"@schematics/angular": {
|
||||||
"version": "9.1.12",
|
"version": "9.1.12",
|
||||||
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.12.tgz",
|
"resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-9.1.12.tgz",
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
"@angular/platform-browser": "~9.1.4",
|
"@angular/platform-browser": "~9.1.4",
|
||||||
"@angular/platform-browser-dynamic": "~9.1.4",
|
"@angular/platform-browser-dynamic": "~9.1.4",
|
||||||
"@angular/router": "~9.1.4",
|
"@angular/router": "~9.1.4",
|
||||||
|
"@openapitools/openapi-generator-cli": "^1.0.15-4.3.1",
|
||||||
"rxjs": "~6.5.4",
|
"rxjs": "~6.5.4",
|
||||||
"tslib": "^1.10.0",
|
"tslib": "^1.10.0",
|
||||||
"zone.js": "~0.10.2"
|
"zone.js": "~0.10.2"
|
||||||
|
|
|
@ -5,14 +5,9 @@ import { AppRoutingModule } from './app-routing.module';
|
||||||
import { AppComponent } from './app.component';
|
import { AppComponent } from './app.component';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [
|
declarations: [AppComponent],
|
||||||
AppComponent
|
imports: [BrowserModule, AppRoutingModule],
|
||||||
],
|
|
||||||
imports: [
|
|
||||||
BrowserModule,
|
|
||||||
AppRoutingModule
|
|
||||||
],
|
|
||||||
providers: [],
|
providers: [],
|
||||||
bootstrap: [AppComponent]
|
bootstrap: [AppComponent],
|
||||||
})
|
})
|
||||||
export class AppModule { }
|
export class AppModule {}
|
||||||
|
|
|
@ -3,7 +3,8 @@
|
||||||
// The list of file replacements can be found in `angular.json`.
|
// The list of file replacements can be found in `angular.json`.
|
||||||
|
|
||||||
export const environment = {
|
export const environment = {
|
||||||
production: false
|
production: false,
|
||||||
|
backendUrl: 'http://localhost:8000/api',
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -70,12 +70,21 @@ async def get_subscriber(subscriber_id: int, hood=Depends(get_hood)):
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/')
|
@router.get(
|
||||||
|
'/',
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='get_all',
|
||||||
|
)
|
||||||
async def email_read_all(hood=Depends(get_hood)):
|
async def email_read_all(hood=Depends(get_hood)):
|
||||||
return await Email.objects.filter(hood=hood).all()
|
return await Email.objects.filter(hood=hood).all()
|
||||||
|
|
||||||
|
|
||||||
@router.post('/', status_code=status.HTTP_201_CREATED)
|
@router.post(
|
||||||
|
'/',
|
||||||
|
status_code=status.HTTP_201_CREATED,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='create',
|
||||||
|
)
|
||||||
async def email_create(values: BodyEmail, response: Response, hood=Depends(get_hood)):
|
async def email_create(values: BodyEmail, response: Response, hood=Depends(get_hood)):
|
||||||
""" Create an Email bot. Call this when creating a hood.
|
""" Create an Email bot. Call this when creating a hood.
|
||||||
|
|
||||||
|
@ -92,31 +101,52 @@ async def email_create(values: BodyEmail, response: Response, hood=Depends(get_h
|
||||||
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
||||||
|
|
||||||
|
|
||||||
@router.get('/status', status_code=status.HTTP_200_OK)
|
@router.get(
|
||||||
|
'/status',
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='status',
|
||||||
|
)
|
||||||
async def email_status(hood=Depends(get_hood)):
|
async def email_status(hood=Depends(get_hood)):
|
||||||
return {'status': spawner.get(hood).status.name}
|
return {'status': spawner.get(hood).status.name}
|
||||||
|
|
||||||
|
|
||||||
@router.post('/start', status_code=status.HTTP_200_OK)
|
@router.post(
|
||||||
|
'/start',
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='start',
|
||||||
|
)
|
||||||
async def email_start(hood=Depends(get_hood)):
|
async def email_start(hood=Depends(get_hood)):
|
||||||
await hood.update(email_enabled=True)
|
await hood.update(email_enabled=True)
|
||||||
spawner.get(hood).start()
|
spawner.get(hood).start()
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
@router.post('/stop', status_code=status.HTTP_200_OK)
|
@router.post(
|
||||||
|
'/stop',
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='stop',
|
||||||
|
)
|
||||||
async def email_stop(hood=Depends(get_hood)):
|
async def email_stop(hood=Depends(get_hood)):
|
||||||
await hood.update(email_enabled=False)
|
await hood.update(email_enabled=False)
|
||||||
spawner.get(hood).stop()
|
spawner.get(hood).stop()
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
@router.get('/{email_id}')
|
@router.get(
|
||||||
|
'/{email_id}',
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='get',
|
||||||
|
)
|
||||||
async def email_read(email=Depends(get_email)):
|
async def email_read(email=Depends(get_email)):
|
||||||
return email
|
return email
|
||||||
|
|
||||||
|
|
||||||
@router.delete('/{email_id}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.delete(
|
||||||
|
'/{email_id}', status_code=status.HTTP_204_NO_CONTENT, operation_id='delete'
|
||||||
|
)
|
||||||
async def email_delete(email=Depends(get_email)):
|
async def email_delete(email=Depends(get_email)):
|
||||||
""" Delete an Email bot.
|
""" Delete an Email bot.
|
||||||
Stops and deletes the Email bot.
|
Stops and deletes the Email bot.
|
||||||
|
@ -126,7 +156,12 @@ async def email_delete(email=Depends(get_email)):
|
||||||
await email.delete()
|
await email.delete()
|
||||||
|
|
||||||
|
|
||||||
@router.post('/subscribe/', status_code=status.HTTP_202_ACCEPTED)
|
@router.post(
|
||||||
|
'/subscribe/',
|
||||||
|
status_code=status.HTTP_202_ACCEPTED,
|
||||||
|
operation_id='subscribe',
|
||||||
|
response_model=BaseModel,
|
||||||
|
)
|
||||||
async def email_subscribe(
|
async def email_subscribe(
|
||||||
subscriber: BodySubscriber, hood=Depends(get_hood_unauthorized)
|
subscriber: BodySubscriber, hood=Depends(get_hood_unauthorized)
|
||||||
):
|
):
|
||||||
|
@ -160,7 +195,12 @@ async def email_subscribe(
|
||||||
raise HTTPException(status_code=status.HTTP_502_BAD_GATEWAY)
|
raise HTTPException(status_code=status.HTTP_502_BAD_GATEWAY)
|
||||||
|
|
||||||
|
|
||||||
@router.post('/subscribe/confirm/{token}', status_code=status.HTTP_201_CREATED)
|
@router.post(
|
||||||
|
'/subscribe/confirm/{token}',
|
||||||
|
status_code=status.HTTP_201_CREATED,
|
||||||
|
operation_id='confirm_subscriber',
|
||||||
|
response_model=BaseModel,
|
||||||
|
)
|
||||||
async def email_subscribe_confirm(token, hood=Depends(get_hood_unauthorized)):
|
async def email_subscribe_confirm(token, hood=Depends(get_hood_unauthorized)):
|
||||||
""" Confirm a new subscriber and add them to the database.
|
""" Confirm a new subscriber and add them to the database.
|
||||||
|
|
||||||
|
@ -179,7 +219,11 @@ async def email_subscribe_confirm(token, hood=Depends(get_hood_unauthorized)):
|
||||||
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
||||||
|
|
||||||
|
|
||||||
@router.delete('/unsubscribe/{token}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.delete(
|
||||||
|
'/unsubscribe/{token}',
|
||||||
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
|
operation_id='unsubscribe',
|
||||||
|
)
|
||||||
async def email_unsubscribe(token, hood=Depends(get_hood_unauthorized)):
|
async def email_unsubscribe(token, hood=Depends(get_hood_unauthorized)):
|
||||||
""" Remove a subscriber from the database when they click on an unsubscribe link.
|
""" Remove a subscriber from the database when they click on an unsubscribe link.
|
||||||
|
|
||||||
|
@ -197,17 +241,30 @@ async def email_unsubscribe(token, hood=Depends(get_hood_unauthorized)):
|
||||||
await subscriber.delete()
|
await subscriber.delete()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/subscribers/')
|
@router.get(
|
||||||
|
'/subscribers/',
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='get_subscribers',
|
||||||
|
)
|
||||||
async def subscribers_read_all(hood=Depends(get_hood)):
|
async def subscribers_read_all(hood=Depends(get_hood)):
|
||||||
return await EmailSubscribers.objects.filter(hood=hood).all()
|
return await EmailSubscribers.objects.filter(hood=hood).all()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/subscribers/{subscriber_id}')
|
@router.get(
|
||||||
|
'/subscribers/{subscriber_id}',
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='get_subscribers',
|
||||||
|
)
|
||||||
async def subscribers_read(subscriber=Depends(get_subscriber)):
|
async def subscribers_read(subscriber=Depends(get_subscriber)):
|
||||||
return subscriber
|
return subscriber
|
||||||
|
|
||||||
|
|
||||||
@router.post('/messages/', status_code=status.HTTP_201_CREATED)
|
@router.post(
|
||||||
|
'/messages/',
|
||||||
|
status_code=status.HTTP_201_CREATED,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='create_email',
|
||||||
|
)
|
||||||
async def email_message_create(
|
async def email_message_create(
|
||||||
message: BodyMessage, hood=Depends(get_hood_unauthorized)
|
message: BodyMessage, hood=Depends(get_hood_unauthorized)
|
||||||
):
|
):
|
||||||
|
|
|
@ -41,23 +41,38 @@ router = APIRouter()
|
||||||
telegram_callback_router = APIRouter()
|
telegram_callback_router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/')
|
@router.get(
|
||||||
|
'/',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get_all',
|
||||||
|
)
|
||||||
async def telegram_read_all(hood=Depends(get_hood)):
|
async def telegram_read_all(hood=Depends(get_hood)):
|
||||||
return await Telegram.objects.filter(hood=hood).all()
|
return await Telegram.objects.filter(hood=hood).all()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/{telegram_id}')
|
@router.get(
|
||||||
|
'/{telegram_id}',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get',
|
||||||
|
)
|
||||||
async def telegram_read(telegram=Depends(get_telegram)):
|
async def telegram_read(telegram=Depends(get_telegram)):
|
||||||
return telegram
|
return telegram
|
||||||
|
|
||||||
|
|
||||||
@router.delete('/{telegram_id}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.delete(
|
||||||
|
'/{telegram_id}', status_code=status.HTTP_204_NO_CONTENT, operation_id='delete'
|
||||||
|
)
|
||||||
async def telegram_delete(telegram=Depends(get_telegram)):
|
async def telegram_delete(telegram=Depends(get_telegram)):
|
||||||
spawner.stop(telegram)
|
spawner.stop(telegram)
|
||||||
await telegram.delete()
|
await telegram.delete()
|
||||||
|
|
||||||
|
|
||||||
@router.post('/', status_code=status.HTTP_201_CREATED)
|
@router.post(
|
||||||
|
'/',
|
||||||
|
status_code=status.HTTP_201_CREATED,
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='create',
|
||||||
|
)
|
||||||
async def telegram_create(
|
async def telegram_create(
|
||||||
response: Response, values: BodyTelegram, hood=Depends(get_hood)
|
response: Response, values: BodyTelegram, hood=Depends(get_hood)
|
||||||
):
|
):
|
||||||
|
@ -70,7 +85,12 @@ async def telegram_create(
|
||||||
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
||||||
|
|
||||||
|
|
||||||
@router.put('/{telegram_id}', status_code=status.HTTP_202_ACCEPTED)
|
@router.put(
|
||||||
|
'/{telegram_id}',
|
||||||
|
status_code=status.HTTP_202_ACCEPTED,
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='update',
|
||||||
|
)
|
||||||
async def telegram_update(values: BodyTelegram, telegram=Depends(get_telegram)):
|
async def telegram_update(values: BodyTelegram, telegram=Depends(get_telegram)):
|
||||||
try:
|
try:
|
||||||
spawner.stop(telegram)
|
spawner.stop(telegram)
|
||||||
|
@ -81,19 +101,34 @@ async def telegram_update(values: BodyTelegram, telegram=Depends(get_telegram)):
|
||||||
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
||||||
|
|
||||||
|
|
||||||
@router.get('/{telegram_id}/status', status_code=status.HTTP_200_OK)
|
@router.get(
|
||||||
|
'/{telegram_id}/status',
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='status',
|
||||||
|
)
|
||||||
async def telegram_status(telegram=Depends(get_telegram)):
|
async def telegram_status(telegram=Depends(get_telegram)):
|
||||||
return {'status': spawner.get(telegram).status.name}
|
return {'status': spawner.get(telegram).status.name}
|
||||||
|
|
||||||
|
|
||||||
@router.post('/{telegram_id}/start', status_code=status.HTTP_200_OK)
|
@router.post(
|
||||||
|
'/{telegram_id}/start',
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='start',
|
||||||
|
)
|
||||||
async def telegram_start(telegram=Depends(get_telegram)):
|
async def telegram_start(telegram=Depends(get_telegram)):
|
||||||
await telegram.update(enabled=True)
|
await telegram.update(enabled=True)
|
||||||
spawner.get(telegram).start()
|
spawner.get(telegram).start()
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
@router.post('/{telegram_id}/stop', status_code=status.HTTP_200_OK)
|
@router.post(
|
||||||
|
'/{telegram_id}/stop',
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='stop',
|
||||||
|
)
|
||||||
async def telegram_stop(telegram=Depends(get_telegram)):
|
async def telegram_stop(telegram=Depends(get_telegram)):
|
||||||
await telegram.update(enabled=False)
|
await telegram.update(enabled=False)
|
||||||
spawner.get(telegram).stop()
|
spawner.get(telegram).stop()
|
||||||
|
|
|
@ -28,42 +28,75 @@ router = APIRouter()
|
||||||
twitter_callback_router = APIRouter()
|
twitter_callback_router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/')
|
@router.get(
|
||||||
|
'/',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get_all',
|
||||||
|
)
|
||||||
async def twitter_read_all(hood=Depends(get_hood)):
|
async def twitter_read_all(hood=Depends(get_hood)):
|
||||||
return await Twitter.objects.filter(hood=hood).all()
|
return await Twitter.objects.filter(hood=hood).all()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/{twitter_id}')
|
@router.get(
|
||||||
|
'/{twitter_id}',
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='get',
|
||||||
|
)
|
||||||
async def twitter_read(twitter=Depends(get_twitter)):
|
async def twitter_read(twitter=Depends(get_twitter)):
|
||||||
return twitter
|
return twitter
|
||||||
|
|
||||||
|
|
||||||
@router.delete('/{twitter_id}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.delete(
|
||||||
|
'/{twitter_id}',
|
||||||
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='delete',
|
||||||
|
)
|
||||||
async def twitter_delete(twitter=Depends(get_twitter)):
|
async def twitter_delete(twitter=Depends(get_twitter)):
|
||||||
spawner.stop(twitter)
|
spawner.stop(twitter)
|
||||||
await twitter.delete()
|
await twitter.delete()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/{twitter_id}/status', status_code=status.HTTP_200_OK)
|
@router.get(
|
||||||
|
'/{twitter_id}/status',
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='status',
|
||||||
|
)
|
||||||
async def twitter_status(twitter=Depends(get_twitter)):
|
async def twitter_status(twitter=Depends(get_twitter)):
|
||||||
return {'status': spawner.get(twitter).status.name}
|
return {'status': spawner.get(twitter).status.name}
|
||||||
|
|
||||||
|
|
||||||
@router.post('/{twitter_id}/start', status_code=status.HTTP_200_OK)
|
@router.post(
|
||||||
|
'/{twitter_id}/start',
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='start',
|
||||||
|
)
|
||||||
async def twitter_start(twitter=Depends(get_twitter)):
|
async def twitter_start(twitter=Depends(get_twitter)):
|
||||||
await twitter.update(enabled=True)
|
await twitter.update(enabled=True)
|
||||||
spawner.get(twitter).start()
|
spawner.get(twitter).start()
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
@router.post('/{twitter_id}/stop', status_code=status.HTTP_200_OK)
|
@router.post(
|
||||||
|
'/{twitter_id}/stop',
|
||||||
|
status_code=status.HTTP_200_OK,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='stop',
|
||||||
|
)
|
||||||
async def twitter_stop(twitter=Depends(get_twitter)):
|
async def twitter_stop(twitter=Depends(get_twitter)):
|
||||||
await twitter.update(enabled=False)
|
await twitter.update(enabled=False)
|
||||||
spawner.get(twitter).stop()
|
spawner.get(twitter).stop()
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
@router.post('/', status_code=status.HTTP_201_CREATED)
|
@router.post(
|
||||||
|
'/',
|
||||||
|
status_code=status.HTTP_201_CREATED,
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='create',
|
||||||
|
)
|
||||||
async def twitter_create(response: Response, hood=Depends(get_hood)):
|
async def twitter_create(response: Response, hood=Depends(get_hood)):
|
||||||
"""
|
"""
|
||||||
`https://api.twitter.com/oauth/authorize?oauth_token=`
|
`https://api.twitter.com/oauth/authorize?oauth_token=`
|
||||||
|
@ -89,7 +122,11 @@ async def twitter_create(response: Response, hood=Depends(get_hood)):
|
||||||
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
raise HTTPException(status_code=status.HTTP_500_INTERNAL_SERVER_ERROR)
|
||||||
|
|
||||||
|
|
||||||
@twitter_callback_router.get('/callback')
|
@twitter_callback_router.get(
|
||||||
|
'/callback',
|
||||||
|
# TODO response_model
|
||||||
|
operation_id='callback',
|
||||||
|
)
|
||||||
async def twitter_read_callback(oauth_token: str, oauth_verifier: str):
|
async def twitter_read_callback(oauth_token: str, oauth_verifier: str):
|
||||||
try:
|
try:
|
||||||
twitter = await Twitter.objects.filter(access_token=oauth_token).get()
|
twitter = await Twitter.objects.filter(access_token=oauth_token).get()
|
||||||
|
|
|
@ -31,6 +31,11 @@ class BodyAdmin(BaseModel):
|
||||||
password: str
|
password: str
|
||||||
|
|
||||||
|
|
||||||
|
class BodyAccessToken(BaseModel):
|
||||||
|
access_token: str
|
||||||
|
token_type: str = 'bearer'
|
||||||
|
|
||||||
|
|
||||||
oauth2_scheme = OAuth2PasswordBearer(tokenUrl='/api/admin/login')
|
oauth2_scheme = OAuth2PasswordBearer(tokenUrl='/api/admin/login')
|
||||||
secret_box = SecretBox(random(SecretBox.KEY_SIZE))
|
secret_box = SecretBox(random(SecretBox.KEY_SIZE))
|
||||||
|
|
||||||
|
@ -72,7 +77,12 @@ async def get_admin(access_token=Depends(oauth2_scheme)):
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.post('/register/', status_code=status.HTTP_202_ACCEPTED)
|
@router.post(
|
||||||
|
'/register/',
|
||||||
|
status_code=status.HTTP_202_ACCEPTED,
|
||||||
|
response_model=BaseModel,
|
||||||
|
operation_id='register',
|
||||||
|
)
|
||||||
async def admin_register(values: BodyAdmin):
|
async def admin_register(values: BodyAdmin):
|
||||||
""" Sends an email with a confirmation link.
|
""" Sends an email with a confirmation link.
|
||||||
|
|
||||||
|
@ -100,7 +110,9 @@ async def admin_register(values: BodyAdmin):
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
|
|
||||||
@router.post('/confirm/{register_token}')
|
@router.post(
|
||||||
|
'/confirm/{register_token}', response_model=BodyAccessToken, operation_id='confirm',
|
||||||
|
)
|
||||||
async def admin_confirm(register_token: str):
|
async def admin_confirm(register_token: str):
|
||||||
""" Registration confirmation and account creation.
|
""" Registration confirmation and account creation.
|
||||||
|
|
||||||
|
@ -110,12 +122,14 @@ async def admin_confirm(register_token: str):
|
||||||
values = from_token(register_token)
|
values = from_token(register_token)
|
||||||
passhash = argon2.hash(values['password'])
|
passhash = argon2.hash(values['password'])
|
||||||
await Admin.objects.create(email=values['email'], passhash=passhash)
|
await Admin.objects.create(email=values['email'], passhash=passhash)
|
||||||
return {'access_token': register_token, 'token_type': 'bearer'}
|
return BodyAccessToken(access_token=register_token)
|
||||||
except IntegrityError:
|
except IntegrityError:
|
||||||
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
||||||
|
|
||||||
|
|
||||||
@router.post('/login/')
|
@router.post(
|
||||||
|
'/login/', response_model=BodyAccessToken, operation_id='login',
|
||||||
|
)
|
||||||
async def admin_login(form_data: OAuth2PasswordRequestForm = Depends()):
|
async def admin_login(form_data: OAuth2PasswordRequestForm = Depends()):
|
||||||
""" Get an access token.
|
""" Get an access token.
|
||||||
|
|
||||||
|
@ -130,10 +144,14 @@ async def admin_login(form_data: OAuth2PasswordRequestForm = Depends()):
|
||||||
detail='Incorrect email or password',
|
detail='Incorrect email or password',
|
||||||
)
|
)
|
||||||
token = to_token(email=form_data.username, password=form_data.password)
|
token = to_token(email=form_data.username, password=form_data.password)
|
||||||
return {'access_token': token, 'token_type': 'bearer'}
|
return BodyAccessToken(access_token=token)
|
||||||
|
|
||||||
|
|
||||||
@router.get('/hoods/')
|
@router.get(
|
||||||
|
'/hoods/',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get_hoods',
|
||||||
|
)
|
||||||
async def admin_hood_read_all(admin=Depends(get_admin)):
|
async def admin_hood_read_all(admin=Depends(get_admin)):
|
||||||
""" Get a list of all hoods of a given admin. """
|
""" Get a list of all hoods of a given admin. """
|
||||||
return (
|
return (
|
||||||
|
|
|
@ -43,13 +43,22 @@ async def get_hood(hood=Depends(get_hood_unauthorized), admin=Depends(get_admin)
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/')
|
@router.get(
|
||||||
|
'/',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get_all',
|
||||||
|
)
|
||||||
async def hood_read_all():
|
async def hood_read_all():
|
||||||
""" Get all existing hoods. """
|
""" Get all existing hoods. """
|
||||||
return await Hood.objects.all()
|
return await Hood.objects.all()
|
||||||
|
|
||||||
|
|
||||||
@router.post('/', status_code=status.HTTP_201_CREATED)
|
@router.post(
|
||||||
|
'/',
|
||||||
|
status_code=status.HTTP_201_CREATED,
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='create_hood',
|
||||||
|
)
|
||||||
async def hood_create(values: BodyHood, response: Response, admin=Depends(get_admin)):
|
async def hood_create(values: BodyHood, response: Response, admin=Depends(get_admin)):
|
||||||
""" Creates a hood.
|
""" Creates a hood.
|
||||||
|
|
||||||
|
@ -66,13 +75,19 @@ async def hood_create(values: BodyHood, response: Response, admin=Depends(get_ad
|
||||||
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
raise HTTPException(status_code=status.HTTP_409_CONFLICT)
|
||||||
|
|
||||||
|
|
||||||
@router.get('/{hood_id}')
|
@router.get(
|
||||||
|
'/{hood_id}',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get_hood',
|
||||||
|
)
|
||||||
async def hood_read(hood=Depends(get_hood)):
|
async def hood_read(hood=Depends(get_hood)):
|
||||||
""" Get hood with id **hood_id**. """
|
""" Get hood with id **hood_id**. """
|
||||||
return hood
|
return hood
|
||||||
|
|
||||||
|
|
||||||
@router.put('/{hood_id}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.put(
|
||||||
|
'/{hood_id}', status_code=status.HTTP_204_NO_CONTENT, operation_id='update_hood',
|
||||||
|
)
|
||||||
async def hood_update(values: BodyHood, hood=Depends(get_hood)):
|
async def hood_update(values: BodyHood, hood=Depends(get_hood)):
|
||||||
""" Updates hood with id **hood_id**.
|
""" Updates hood with id **hood_id**.
|
||||||
|
|
||||||
|
@ -82,7 +97,9 @@ async def hood_update(values: BodyHood, hood=Depends(get_hood)):
|
||||||
await hood.update(**values.__dict__)
|
await hood.update(**values.__dict__)
|
||||||
|
|
||||||
|
|
||||||
@router.delete('/{hood_id}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.delete(
|
||||||
|
'/{hood_id}', status_code=status.HTTP_204_NO_CONTENT, operation_id='update_hood',
|
||||||
|
)
|
||||||
async def hood_delete(hood=Depends(get_hood)):
|
async def hood_delete(hood=Depends(get_hood)):
|
||||||
""" Deletes hood with id **hood_id**. """
|
""" Deletes hood with id **hood_id**. """
|
||||||
for relation in await AdminHoodRelation.objects.filter(hood=hood).all():
|
for relation in await AdminHoodRelation.objects.filter(hood=hood).all():
|
||||||
|
|
|
@ -33,13 +33,22 @@ async def get_badword(badword_id: int, hood=Depends(get_hood)):
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/')
|
@router.get(
|
||||||
|
'/',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get_badwords',
|
||||||
|
)
|
||||||
async def badword_read_all(hood=Depends(get_hood)):
|
async def badword_read_all(hood=Depends(get_hood)):
|
||||||
""" Get all badwords of hood with id **hood_id**. """
|
""" Get all badwords of hood with id **hood_id**. """
|
||||||
return await BadWord.objects.filter(hood=hood).all()
|
return await BadWord.objects.filter(hood=hood).all()
|
||||||
|
|
||||||
|
|
||||||
@router.post('/', status_code=status.HTTP_201_CREATED)
|
@router.post(
|
||||||
|
'/',
|
||||||
|
status_code=status.HTTP_201_CREATED,
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='create_badword',
|
||||||
|
)
|
||||||
async def badword_create(
|
async def badword_create(
|
||||||
values: BodyBadWord, response: Response, hood=Depends(get_hood)
|
values: BodyBadWord, response: Response, hood=Depends(get_hood)
|
||||||
):
|
):
|
||||||
|
@ -58,13 +67,21 @@ async def badword_create(
|
||||||
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY)
|
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY)
|
||||||
|
|
||||||
|
|
||||||
@router.get('/{badword_id}')
|
@router.get(
|
||||||
|
'/{badword_id}',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get_badword',
|
||||||
|
)
|
||||||
async def badword_read(badword=Depends(get_badword)):
|
async def badword_read(badword=Depends(get_badword)):
|
||||||
""" Reads badword with id **badword_id** for hood with id **hood_id**. """
|
""" Reads badword with id **badword_id** for hood with id **hood_id**. """
|
||||||
return badword
|
return badword
|
||||||
|
|
||||||
|
|
||||||
@router.put('/{badword_id}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.put(
|
||||||
|
'/{badword_id}',
|
||||||
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
|
operation_id='update_badword',
|
||||||
|
)
|
||||||
async def badword_update(values: BodyBadWord, badword=Depends(get_badword)):
|
async def badword_update(values: BodyBadWord, badword=Depends(get_badword)):
|
||||||
""" Updates badword with id **badword_id** for hood with id **hood_id**.
|
""" Updates badword with id **badword_id** for hood with id **hood_id**.
|
||||||
|
|
||||||
|
@ -73,7 +90,11 @@ async def badword_update(values: BodyBadWord, badword=Depends(get_badword)):
|
||||||
await badword.update(**values.__dict__)
|
await badword.update(**values.__dict__)
|
||||||
|
|
||||||
|
|
||||||
@router.delete('/{badword_id}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.delete(
|
||||||
|
'/{badword_id}',
|
||||||
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
|
operation_id='delete_badword',
|
||||||
|
)
|
||||||
async def badword_delete(badword=Depends(get_badword)):
|
async def badword_delete(badword=Depends(get_badword)):
|
||||||
""" Deletes badword with id **badword_id** for hood with id **hood_id**. """
|
""" Deletes badword with id **badword_id** for hood with id **hood_id**. """
|
||||||
await badword.delete()
|
await badword.delete()
|
||||||
|
|
|
@ -34,13 +34,22 @@ async def get_trigger(trigger_id: int, hood=Depends(get_hood)):
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|
||||||
@router.get('/')
|
@router.get(
|
||||||
|
'/',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get_triggers',
|
||||||
|
)
|
||||||
async def trigger_read_all(hood=Depends(get_hood)):
|
async def trigger_read_all(hood=Depends(get_hood)):
|
||||||
""" Get all triggers of hood with id **hood_id**. """
|
""" Get all triggers of hood with id **hood_id**. """
|
||||||
return await Trigger.objects.filter(hood=hood).all()
|
return await Trigger.objects.filter(hood=hood).all()
|
||||||
|
|
||||||
|
|
||||||
@router.post('/', status_code=status.HTTP_201_CREATED)
|
@router.post(
|
||||||
|
'/',
|
||||||
|
status_code=status.HTTP_201_CREATED,
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='create_trigger',
|
||||||
|
)
|
||||||
async def trigger_create(
|
async def trigger_create(
|
||||||
values: BodyTrigger, response: Response, hood=Depends(get_hood)
|
values: BodyTrigger, response: Response, hood=Depends(get_hood)
|
||||||
):
|
):
|
||||||
|
@ -59,13 +68,21 @@ async def trigger_create(
|
||||||
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY)
|
raise HTTPException(status_code=status.HTTP_422_UNPROCESSABLE_ENTITY)
|
||||||
|
|
||||||
|
|
||||||
@router.get('/{trigger_id}')
|
@router.get(
|
||||||
|
'/{trigger_id}',
|
||||||
|
# TODO response_model,
|
||||||
|
operation_id='get_trigger',
|
||||||
|
)
|
||||||
async def trigger_read(trigger=Depends(get_trigger)):
|
async def trigger_read(trigger=Depends(get_trigger)):
|
||||||
""" Reads trigger with id **trigger_id** for hood with id **hood_id**. """
|
""" Reads trigger with id **trigger_id** for hood with id **hood_id**. """
|
||||||
return trigger
|
return trigger
|
||||||
|
|
||||||
|
|
||||||
@router.put('/{trigger_id}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.put(
|
||||||
|
'/{trigger_id}',
|
||||||
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
|
operation_id='update_trigger',
|
||||||
|
)
|
||||||
async def trigger_update(values: BodyTrigger, trigger=Depends(get_trigger)):
|
async def trigger_update(values: BodyTrigger, trigger=Depends(get_trigger)):
|
||||||
""" Updates trigger with id **trigger_id** for hood with id **hood_id**.
|
""" Updates trigger with id **trigger_id** for hood with id **hood_id**.
|
||||||
|
|
||||||
|
@ -74,7 +91,11 @@ async def trigger_update(values: BodyTrigger, trigger=Depends(get_trigger)):
|
||||||
await trigger.update(**values.__dict__)
|
await trigger.update(**values.__dict__)
|
||||||
|
|
||||||
|
|
||||||
@router.delete('/{trigger_id}', status_code=status.HTTP_204_NO_CONTENT)
|
@router.delete(
|
||||||
|
'/{trigger_id}',
|
||||||
|
status_code=status.HTTP_204_NO_CONTENT,
|
||||||
|
operation_id='delete_trigger',
|
||||||
|
)
|
||||||
async def trigger_delete(trigger=Depends(get_trigger)):
|
async def trigger_delete(trigger=Depends(get_trigger)):
|
||||||
""" Deletes trigger with id **trigger_id** for hood with id **hood_id**. """
|
""" Deletes trigger with id **trigger_id** for hood with id **hood_id**. """
|
||||||
await trigger.delete()
|
await trigger.delete()
|
||||||
|
|
Loading…
Reference in a new issue