mirror of
https://github.com/spl0k/supysonic.git
synced 2024-12-22 08:56:17 +00:00
Fix supysonic.utils.get_secret_key
This commit is contained in:
parent
6bdee81e57
commit
64cf272887
@ -1,7 +1,7 @@
|
|||||||
# This file is part of Supysonic.
|
# This file is part of Supysonic.
|
||||||
# Supysonic is a Python implementation of the Subsonic server API.
|
# Supysonic is a Python implementation of the Subsonic server API.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2013-2020 Alban 'spl0k' Féron
|
# Copyright (C) 2013-2022 Alban 'spl0k' Féron
|
||||||
# 2017 Óscar García Amor
|
# 2017 Óscar García Amor
|
||||||
#
|
#
|
||||||
# Distributed under terms of the GNU AGPLv3 license.
|
# Distributed under terms of the GNU AGPLv3 license.
|
||||||
@ -11,8 +11,6 @@ import random
|
|||||||
import string
|
import string
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
from pony.orm import ObjectNotFound
|
|
||||||
|
|
||||||
from ..db import User
|
from ..db import User
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
# This file is part of Supysonic.
|
# This file is part of Supysonic.
|
||||||
# Supysonic is a Python implementation of the Subsonic server API.
|
# Supysonic is a Python implementation of the Subsonic server API.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2019-2020 Alban 'spl0k' Féron
|
# Copyright (C) 2019-2022 Alban 'spl0k' Féron
|
||||||
#
|
#
|
||||||
# Distributed under terms of the GNU AGPLv3 license.
|
# Distributed under terms of the GNU AGPLv3 license.
|
||||||
|
|
||||||
from base64 import b64encode, b64decode
|
from base64 import b64encode, b64decode
|
||||||
from os import urandom
|
from os import urandom
|
||||||
from pony.orm import db_session, commit, ObjectNotFound
|
|
||||||
|
|
||||||
from supysonic.db import Meta
|
from supysonic.db import Meta
|
||||||
|
|
||||||
@ -19,16 +18,11 @@ def get_secret_key(keyname):
|
|||||||
if keyname in __key_cache:
|
if keyname in __key_cache:
|
||||||
return __key_cache[keyname]
|
return __key_cache[keyname]
|
||||||
|
|
||||||
with db_session():
|
try:
|
||||||
# Commit both at enter and exit. The metadb/db split (from supysonic.db)
|
key = b64decode(Meta[keyname].value)
|
||||||
# confuses Pony which can either error or hang when this method is called
|
except Meta.DoesNotExist:
|
||||||
commit()
|
key = urandom(128)
|
||||||
try:
|
Meta.create(key=keyname, value=b64encode(key).decode())
|
||||||
key = b64decode(Meta[keyname].value)
|
|
||||||
except ObjectNotFound:
|
|
||||||
key = urandom(128)
|
|
||||||
Meta(key=keyname, value=b64encode(key).decode())
|
|
||||||
commit()
|
|
||||||
|
|
||||||
__key_cache[keyname] = key
|
__key_cache[keyname] = key
|
||||||
return key
|
return key
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# This file is part of Supysonic.
|
# This file is part of Supysonic.
|
||||||
# Supysonic is a Python implementation of the Subsonic server API.
|
# Supysonic is a Python implementation of the Subsonic server API.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2013-2018 Alban 'spl0k' Féron
|
# Copyright (C) 2013-2022 Alban 'spl0k' Féron
|
||||||
# 2018-2019 Carey 'pR0Ps' Metcalfe
|
# 2018-2019 Carey 'pR0Ps' Metcalfe
|
||||||
# 2017 Óscar García Amor
|
# 2017 Óscar García Amor
|
||||||
#
|
#
|
||||||
@ -12,7 +12,6 @@ import mimetypes
|
|||||||
|
|
||||||
from flask import Flask
|
from flask import Flask
|
||||||
from os import makedirs, path
|
from os import makedirs, path
|
||||||
from pony.orm import db_session
|
|
||||||
|
|
||||||
from .config import IniConfig
|
from .config import IniConfig
|
||||||
from .cache import Cache
|
from .cache import Cache
|
||||||
@ -49,7 +48,6 @@ def create_application(config=None):
|
|||||||
|
|
||||||
# Initialize database
|
# Initialize database
|
||||||
init_database(app.config["BASE"]["database_uri"])
|
init_database(app.config["BASE"]["database_uri"])
|
||||||
app.wsgi_app = db_session(app.wsgi_app)
|
|
||||||
|
|
||||||
# Insert unknown mimetypes
|
# Insert unknown mimetypes
|
||||||
for k, v in app.config["MIMETYPES"].items():
|
for k, v in app.config["MIMETYPES"].items():
|
||||||
@ -60,8 +58,8 @@ def create_application(config=None):
|
|||||||
# Initialize Cache objects
|
# Initialize Cache objects
|
||||||
# Max size is MB in the config file but Cache expects bytes
|
# Max size is MB in the config file but Cache expects bytes
|
||||||
cache_dir = app.config["WEBAPP"]["cache_dir"]
|
cache_dir = app.config["WEBAPP"]["cache_dir"]
|
||||||
max_size_cache = app.config["WEBAPP"]["cache_size"] * 1024 ** 2
|
max_size_cache = app.config["WEBAPP"]["cache_size"] * 1024**2
|
||||||
max_size_transcodes = app.config["WEBAPP"]["transcode_cache_size"] * 1024 ** 2
|
max_size_transcodes = app.config["WEBAPP"]["transcode_cache_size"] * 1024**2
|
||||||
app.cache = Cache(path.join(cache_dir, "cache"), max_size_cache)
|
app.cache = Cache(path.join(cache_dir, "cache"), max_size_cache)
|
||||||
app.transcode_cache = Cache(path.join(cache_dir, "transcodes"), max_size_transcodes)
|
app.transcode_cache = Cache(path.join(cache_dir, "transcodes"), max_size_transcodes)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
# This file is part of Supysonic.
|
# This file is part of Supysonic.
|
||||||
# Supysonic is a Python implementation of the Subsonic server API.
|
# Supysonic is a Python implementation of the Subsonic server API.
|
||||||
#
|
#
|
||||||
# Copyright (C) 2017-2020 Alban 'spl0k' Féron
|
# Copyright (C) 2017-2022 Alban 'spl0k' Féron
|
||||||
#
|
#
|
||||||
# Distributed under terms of the GNU AGPLv3 license.
|
# Distributed under terms of the GNU AGPLv3 license.
|
||||||
|
|
||||||
@ -13,8 +13,6 @@ import sys
|
|||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from pony.orm import db_session
|
|
||||||
|
|
||||||
from supysonic.db import init_database, release_database
|
from supysonic.db import init_database, release_database
|
||||||
from supysonic.config import DefaultConfig
|
from supysonic.config import DefaultConfig
|
||||||
from supysonic.managers.user import UserManager
|
from supysonic.managers.user import UserManager
|
||||||
@ -101,9 +99,8 @@ class TestBase(unittest.TestCase):
|
|||||||
self.__app = create_application(self.config)
|
self.__app = create_application(self.config)
|
||||||
self.client = self.__app.test_client()
|
self.client = self.__app.test_client()
|
||||||
|
|
||||||
with db_session:
|
UserManager.add("alice", "Alic3", admin=True)
|
||||||
UserManager.add("alice", "Alic3", admin=True)
|
UserManager.add("bob", "B0b")
|
||||||
UserManager.add("bob", "B0b")
|
|
||||||
|
|
||||||
def _patch_client(self):
|
def _patch_client(self):
|
||||||
self.client.get = patch_method(self.client.get)
|
self.client.get = patch_method(self.client.get)
|
||||||
|
Loading…
Reference in New Issue
Block a user