From fb3aeaa662674b63d8fd277dc977f2da952ec89d Mon Sep 17 00:00:00 2001 From: mo9a7i Date: Fri, 18 Feb 2022 13:12:40 +0300 Subject: [PATCH] fix errors with ports and env file --- .gitignore | 1 + Dockerfile | 1 + README.md | 12 ++++++------ docker_env_file.example | 4 ++++ firebasescrypt/firebasescrypt.py | 2 +- main.py | 6 +++--- 6 files changed, 16 insertions(+), 10 deletions(-) create mode 100644 docker_env_file.example diff --git a/.gitignore b/.gitignore index 510c73d..3e1746e 100644 --- a/.gitignore +++ b/.gitignore @@ -87,6 +87,7 @@ celerybeat-schedule *.sage.py # Environments +docker_env_file .env .venv env/ diff --git a/Dockerfile b/Dockerfile index 7cbf87a..0b22dab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM python:3 ADD main.py / ADD requirements.txt / +ADD firebasescrypt /firebasescrypt RUN pip install --upgrade pip RUN pip install flask python-dotenv diff --git a/README.md b/README.md index d4e6c7b..c3ea8ad 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,13 @@ 1. First, you need some configuration variables from your firebase project, you can get them from firebase->authentication-> little three dots top right of users table -2. create an `.env` file in the project root directory, next to Dockerfile with the below content +2. create an `docker_env_file` file in the project root directory, next to Dockerfile with the below content. (You can rename the `docker_env_file.example` and use it) ```bash - base64_signer_key='get_from_your_firebase_project' - base64_salt_separator='get_from_your_firebase_project' - rounds=get_from_your_firebase_project - mem_cost=get_from_your_firebase_project + base64_signer_key=__get_from_your_firebase_project__ + base64_salt_separator=__get_from_your_firebase_project__ + rounds=__get_from_your_firebase_project__ + mem_cost=__get_from_your_firebase_project__ ``` 3. Next, run the below commands in the project folder (next to Dockerfile) @@ -21,7 +21,7 @@ $git clone this repo $cd firebasescrypt $docker build -t firebasescrypt - $docker run firebasescrypt + $docker run -p 5959 --env-file ./docker_env_file firebasescrypt ``` Now you have a flask endpoint running at your machine at `http://127.0.0.1:5959` (unless you changed the port or put on a server) diff --git a/docker_env_file.example b/docker_env_file.example new file mode 100644 index 0000000..8c65d4d --- /dev/null +++ b/docker_env_file.example @@ -0,0 +1,4 @@ +base64_signer_key= +base64_salt_separator= +rounds= +mem_cost= diff --git a/firebasescrypt/firebasescrypt.py b/firebasescrypt/firebasescrypt.py index 5b237fe..9eb0425 100644 --- a/firebasescrypt/firebasescrypt.py +++ b/firebasescrypt/firebasescrypt.py @@ -74,7 +74,7 @@ def verify_password( ) -> bool: """Verify if password matches known hash""" derived_key: bytes = generate_derived_key(password, salt, salt_separator, rounds, mem_cost) - signer_key: bytes = base64.b64decode(signer_key) + signer_key: bytes = base64.urlsafe_b64decode(signer_key) result = encrypt(signer_key, derived_key) diff --git a/main.py b/main.py index 6310163..53bbf8c 100644 --- a/main.py +++ b/main.py @@ -19,12 +19,12 @@ def hash(): password_salt = urllib.parse.unquote(request.args.get('salt', "")) if not isBase64(password_salt): - return "salt is not in correct syntax"; + return "salt is not in correct syntax" # Sample Password hash parameters from Firebase Console. salt_separator = os.getenv('base64_salt_separator') signer_key = os.getenv('base64_signer_key') - signer_key: bytes = base64.b64decode(signer_key) + signer_key: bytes = base64.urlsafe_b64decode(signer_key) rounds= int(os.getenv('rounds')) mem_cost= int(os.getenv('mem_cost')) derived_key = firebasescrypt.generate_derived_key(password_native, password_salt, salt_separator, rounds, mem_cost) @@ -41,4 +41,4 @@ def isBase64(sb): return False if __name__ == "__main__": - app.run(port=5959) \ No newline at end of file + app.run(host='0.0.0.0', port=5959) \ No newline at end of file