mirror of
https://github.com/LibreTranslate/LibreTranslate.git
synced 2025-06-21 16:41:08 +00:00
Add shared storage option
This commit is contained in:
parent
e00f3af7db
commit
ab27dcbaf3
5 changed files with 204 additions and 10 deletions
42
libretranslate/secret.py
Normal file
42
libretranslate/secret.py
Normal file
|
@ -0,0 +1,42 @@
|
|||
import atexit
|
||||
import random
|
||||
import string
|
||||
from multiprocessing import Value
|
||||
|
||||
from libretranslate.storage import get_storage
|
||||
from apscheduler.schedulers.background import BackgroundScheduler
|
||||
|
||||
setup_secrets = Value('b', False)
|
||||
|
||||
def generate_secret():
|
||||
return ''.join(random.choices(string.ascii_uppercase + string.digits, k=7))
|
||||
|
||||
def rotate_secrets():
|
||||
s = get_storage()
|
||||
secret_1 = s.get_str("secret_1")
|
||||
s.set_str("secret_0", secret_1)
|
||||
s.set_str("secret_1", generate_secret())
|
||||
|
||||
def secret_match(secret):
|
||||
s = get_storage()
|
||||
return secret == s.get_str("secret_0") or secret == s.get_str("secret_1")
|
||||
|
||||
def get_current_secret():
|
||||
return get_storage().get_str("secret_1")
|
||||
|
||||
def setup():
|
||||
# Only setup the scheduler and secrets on one process
|
||||
if not setup_secrets.value:
|
||||
setup_secrets.value = True
|
||||
|
||||
s = get_storage()
|
||||
s.set_str("secret_0", generate_secret())
|
||||
s.set_str("secret_1", generate_secret())
|
||||
|
||||
scheduler = BackgroundScheduler()
|
||||
scheduler.add_job(func=rotate_secrets, trigger="interval", minutes=30)
|
||||
|
||||
scheduler.start()
|
||||
|
||||
# Shut down the scheduler when exiting the app
|
||||
atexit.register(lambda: scheduler.shutdown())
|
Loading…
Add table
Add a link
Reference in a new issue