implement CLI password recovery (hacky :omg:)

+ rewrite migrations logic
+ rename encode_password to hash_password
+ update image sizes (add medium size)
+ rename image endpoints
This commit is contained in:
cwilvx
2024-05-11 21:26:03 +03:00
parent 1e857c1e89
commit b40f05cc7c
21 changed files with 306 additions and 152 deletions
+59 -39
View File
@@ -13,6 +13,9 @@ api = APIBlueprint("imgserver", __name__, url_prefix="/img", abp_tags=[bp_tag])
def send_fallback_img(filename: str = "default.webp"):
"""
Returns the fallback image from the assets folder.
"""
folder = Paths.get_assets_path()
img = Path(folder) / filename
@@ -22,6 +25,18 @@ def send_fallback_img(filename: str = "default.webp"):
return send_from_directory(folder, filename)
def send_file_or_fallback(folder: str, filename: str, fallback: str = "default.webp"):
"""
Returns the file from the folder or the fallback image.
"""
fpath = Path(folder) / filename
if fpath.exists():
return send_from_directory(folder, filename)
return send_fallback_img(fallback)
class ImagePath(BaseModel):
imgpath: str = Field(
description="The image filename",
@@ -43,62 +58,72 @@ class ImagePath(BaseModel):
# return send_fallback_img()
@api.get("/t/<imgpath>")
# TRACK THUMBNAILS
@api.get("/thumbnail/<imgpath>")
def send_lg_thumbnail(path: ImagePath):
"""
Get large thumbnail (500 x 500)
"""
folder = Paths.get_lg_thumb_path()
fpath = Path(folder) / path.imgpath
if fpath.exists():
return send_from_directory(folder, path.imgpath)
return send_fallback_img()
return send_file_or_fallback(folder, path.imgpath)
@api.get("/t/s/<imgpath>")
@api.get("/thumbnail/xsmall/<imgpath>")
def send_xsm_thumbnail(path: ImagePath):
"""
Get extra small thumbnail (64px)
"""
folder = Paths.get_xsm_thumb_path()
return send_file_or_fallback(folder, path.imgpath)
@api.get("/thumbnail/small/<imgpath>")
def send_sm_thumbnail(path: ImagePath):
"""
Get small thumbnail (64 x 64)
Get small thumbnail (96px)
"""
folder = Paths.get_sm_thumb_path()
fpath = Path(folder) / path.imgpath
if fpath.exists():
return send_from_directory(folder, path.imgpath)
return send_fallback_img()
return send_file_or_fallback(folder, path.imgpath)
@api.get("/a/<imgpath>")
@api.get("/thumbnail/medium/<imgpath>")
def send_md_thumbnail(path: ImagePath):
"""
Get medium thumbnail (256px)
"""
folder = Paths.get_md_thumb_path()
return send_file_or_fallback(folder, path.imgpath)
# ARTISTS
@api.get("/artist/<imgpath>")
def send_lg_artist_image(path: ImagePath):
"""
Get large artist image (500 x 500)
"""
folder = Paths.get_artist_img_lg_path()
fpath = Path(folder) / path.imgpath
if fpath.exists():
return send_from_directory(folder, path.imgpath)
return send_fallback_img("artist.webp")
folder = Paths.get_lg_artist_img_path()
return send_file_or_fallback(folder, path.imgpath, "artist.webp")
@api.get("/a/s/<imgpath>")
@api.get("/artist/small/<imgpath>")
def send_sm_artist_image(path: ImagePath):
"""
Get small artist image (64 x 64)
Get small artist image (128)
"""
folder = Paths.get_artist_img_sm_path()
fpath = Path(folder) / path.imgpath
if fpath.exists():
return send_from_directory(folder, path.imgpath)
return send_fallback_img("artist.webp")
folder = Paths.get_sm_artist_img_path()
return send_file_or_fallback(folder, path.imgpath, "artist.webp")
@api.get("/artist/medium/<imgpath>")
def send_md_artist_image(path: ImagePath):
"""
Get medium artist image (256px)
"""
folder = Paths.get_md_artist_img_path()
return send_file_or_fallback(folder, path.imgpath, "artist.webp")
# PLAYLISTS
class PlaylistImagePath(BaseModel):
imgpath: str = Field(
description="The image path",
@@ -106,7 +131,7 @@ class PlaylistImagePath(BaseModel):
)
@api.get("/p/<imgpath>")
@api.get("/playlist/<imgpath>")
def send_playlist_image(path: PlaylistImagePath):
"""
Get playlist image
@@ -114,9 +139,4 @@ def send_playlist_image(path: PlaylistImagePath):
Images are constructed as '{playlist_id}.webp'
"""
folder = Paths.get_playlist_img_path()
fpath = Path(folder) / path.imgpath
if fpath.exists():
return send_from_directory(folder, path.imgpath)
return send_fallback_img("playlist.svg")
return send_file_or_fallback(folder, path.imgpath, "playlist.svg")