From 441150f1bd6c8051df1ee5f58a8724cdb445b2fb Mon Sep 17 00:00:00 2001 From: laurent Date: Thu, 27 Apr 2023 15:16:33 +0200 Subject: [PATCH 1/2] Initial commit --- .gitignore | 162 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 2 + 2 files changed, 164 insertions(+) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5d381cc --- /dev/null +++ b/.gitignore @@ -0,0 +1,162 @@ +# ---> Python +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + diff --git a/README.md b/README.md new file mode 100644 index 0000000..6b2a299 --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +# pokeranalytics_services + From cfdedce55089f3a12e0cc13b13be59a27e284776 Mon Sep 17 00:00:00 2001 From: Laurent Date: Fri, 28 Apr 2023 14:33:06 +0200 Subject: [PATCH 2/2] mail forwarder --- app.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ script.sh | 1 + 2 files changed, 49 insertions(+) create mode 100644 app.py create mode 100755 script.sh diff --git a/app.py b/app.py new file mode 100644 index 0000000..675f6b7 --- /dev/null +++ b/app.py @@ -0,0 +1,48 @@ +# save this as app.py +from flask import Flask +from flask import request +from werkzeug.utils import secure_filename +from flask_mail import Mail, Message + +app = Flask(__name__) +app.config['MAIL_SERVER']='smtp-stax.alwaysdata.net' +app.config['MAIL_PORT'] = 587 +app.config['MAIL_USERNAME'] = 'backup@pokeranalytics.net' +app.config['MAIL_PASSWORD'] = 'StaxBackup****' +app.config['MAIL_USE_TLS'] = True +# app.config['MAIL_USE_SSL'] = True + +mail = Mail(app) + +# EMAIL_HOST = 'smtp-stax.alwaysdata.net' +# EMAIL_PORT = 587 +# EMAIL_HOST_USER = 'backup@pokeranalytics.net' +# EMAIL_HOST_PASSWORD = 'StaxBackup****' +# EMAIL_USE_TLS = True +# DEFAULT_FROM_EMAIL = 'Poker Analytics Backup ' + +@app.route('/send', methods=['GET', 'POST']) +def sender(): + if request.method == 'POST': + # mail = request.args.get('mail', '') + recipient = request.form['recipient'] + file = request.files['file'] + return send_mail(recipient, file) + else: + return show_method_error(request.method) + +def send_mail(recipient, file): + + msg = Message('Poker Analytics Backup', sender = 'backup@pokeranalytics.net', recipients = [recipient]) + msg.body = "This is the backup" + + filename = secure_filename(file.filename) + msg.attach(filename, "text/csv", file.read()) + mail.send(msg) + + print(mail) + + return f'POST to {recipient}' + +def show_method_error(method): + return f'bad method:{method}' diff --git a/script.sh b/script.sh new file mode 100755 index 0000000..ad012c8 --- /dev/null +++ b/script.sh @@ -0,0 +1 @@ +curl -F recipient=laurent@staxriver.com -F file=@app.py http://127.0.0.1:5000/send