Media access tokens are now an option
This commit is contained in:
parent
c272342b4b
commit
09ec0f4620
@ -10,6 +10,8 @@
|
|||||||
"email_confirmed": "Email confirmed. You can now log in."
|
"email_confirmed": "Email confirmed. You can now log in."
|
||||||
},
|
},
|
||||||
"external_address": "localhost",
|
"external_address": "localhost",
|
||||||
|
"media_token_access": false,
|
||||||
|
"media_token_valid_hours": 12,
|
||||||
"registration_enabled": true,
|
"registration_enabled": true,
|
||||||
"registration_requires_confirmation": true,
|
"registration_requires_confirmation": true,
|
||||||
"mailer": {
|
"mailer": {
|
||||||
|
@ -29,7 +29,7 @@ from fastapi.responses import UJSONResponse, Response
|
|||||||
from fastapi.exceptions import HTTPException
|
from fastapi.exceptions import HTTPException
|
||||||
from starlette.status import HTTP_204_NO_CONTENT, HTTP_401_UNAUTHORIZED, HTTP_409_CONFLICT
|
from starlette.status import HTTP_204_NO_CONTENT, HTTP_401_UNAUTHORIZED, HTTP_409_CONFLICT
|
||||||
|
|
||||||
from modules.utils import logWrite
|
from modules.utils import configGet, logWrite
|
||||||
|
|
||||||
async def compress_image(image_path: str):
|
async def compress_image(image_path: str):
|
||||||
|
|
||||||
@ -94,12 +94,15 @@ async def photo_upload(file: UploadFile, album: str, ignore_duplicates: bool = F
|
|||||||
duplicates = await get_duplicates(file_hash, album)
|
duplicates = await get_duplicates(file_hash, album)
|
||||||
|
|
||||||
if len(duplicates) > 0 and ignore_duplicates is False:
|
if len(duplicates) > 0 and ignore_duplicates is False:
|
||||||
|
if configGet("media_token_access") is True:
|
||||||
duplicates_ids = []
|
duplicates_ids = []
|
||||||
for entry in duplicates:
|
for entry in duplicates:
|
||||||
duplicates_ids.append(entry["id"])
|
duplicates_ids.append(entry["id"])
|
||||||
access_token = create_access_token(data={"sub": current_user.user, "scopes": ["me", "photos.read"], "allowed": duplicates_ids}, expires_delta=timedelta(hours=1))
|
access_token = create_access_token(data={"sub": current_user.user, "scopes": ["me", "photos.read"], "allowed": duplicates_ids}, expires_delta=timedelta(hours=configGet("media_token_valid_hours")))
|
||||||
access_token_short = uuid4().hex[:12].lower()
|
access_token_short = uuid4().hex[:12].lower()
|
||||||
col_tokens.insert_one({"short": access_token_short, "access_token": access_token, "photos": duplicates_ids})
|
col_tokens.insert_one({"short": access_token_short, "access_token": access_token, "photos": duplicates_ids})
|
||||||
|
else:
|
||||||
|
access_token_short = None
|
||||||
return UJSONResponse(
|
return UJSONResponse(
|
||||||
{
|
{
|
||||||
"detail": "Image duplicates found. Pass 'ignore_duplicates=true' to ignore.",
|
"detail": "Image duplicates found. Pass 'ignore_duplicates=true' to ignore.",
|
||||||
@ -149,12 +152,18 @@ async def photo_upload(file: UploadFile, album: str, ignore_duplicates: bool = F
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
photo_get_token_responses = {
|
# Access to photos y token generated for example by
|
||||||
|
# upload method when duplicates are found. Is disabled
|
||||||
|
# by default and should remain so if not really needed.
|
||||||
|
if configGet("media_token_access") is True:
|
||||||
|
|
||||||
|
photo_get_token_responses = {
|
||||||
401: AccessTokenInvalidError().openapi,
|
401: AccessTokenInvalidError().openapi,
|
||||||
404: PhotoNotFoundError("id").openapi
|
404: PhotoNotFoundError("id").openapi
|
||||||
}
|
}
|
||||||
@app.get("/token/photo/{token}", description="Get a photo by its duplicate token", responses=photo_get_token_responses)
|
|
||||||
async def photo_get_token(token: str, id: int):
|
@app.get("/token/photo/{token}", description="Get a photo by its duplicate token", responses=photo_get_token_responses)
|
||||||
|
async def photo_get_token(token: str, id: int):
|
||||||
|
|
||||||
db_entry = col_tokens.find_one({"short": token})
|
db_entry = col_tokens.find_one({"short": token})
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user