Compare commits

...

2 Commits

Author SHA1 Message Date
c9cbb53eea routing updated to be more variable and on demand
- calendar json file now generated on demand at download request
- device fingerprint route now added
2020-05-24 13:26:41 +02:00
98a78f2102 adds delete account function 2020-05-22 10:47:28 +02:00
44 changed files with 70 additions and 735 deletions

BIN
app.db

Binary file not shown.

Binary file not shown.

@ -1 +1 @@
Subproject commit 060e506547778df6914f848e6e21d719a47a9446
Subproject commit f94c64e699e29cac8c707337e219ada64a1ae01e

View File

@ -1,84 +0,0 @@
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
if [ "${BASH_SOURCE-}" = "$0" ]; then
echo "You must source this script: \$ source $0" >&2
exit 33
fi
deactivate () {
unset -f pydoc >/dev/null 2>&1
# reset old environment variables
# ! [ -z ${VAR+_} ] returns true if VAR is declared at all
if ! [ -z "${_OLD_VIRTUAL_PATH:+_}" ] ; then
PATH="$_OLD_VIRTUAL_PATH"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
hash -r 2>/dev/null
fi
if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then
PS1="$_OLD_VIRTUAL_PS1"
export PS1
unset _OLD_VIRTUAL_PS1
fi
unset VIRTUAL_ENV
if [ ! "${1-}" = "nondestructive" ] ; then
# Self destruct!
unset -f deactivate
fi
}
# unset irrelevant variables
deactivate nondestructive
VIRTUAL_ENV='/home/raphael/dev/git/calendarwatch_frontend/calendarwatch'
export VIRTUAL_ENV
_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH
# unset PYTHONHOME if set
if ! [ -z "${PYTHONHOME+_}" ] ; then
_OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME"
unset PYTHONHOME
fi
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then
_OLD_VIRTUAL_PS1="${PS1-}"
if [ "x" != x ] ; then
PS1="${PS1-}"
else
PS1="(`basename \"$VIRTUAL_ENV\"`) ${PS1-}"
fi
export PS1
fi
# Make sure to unalias pydoc if it's already there
alias pydoc 2>/dev/null >/dev/null && unalias pydoc || true
pydoc () {
python -m pydoc "$@"
}
# This should detect bash and zsh, which have a hash command that must
# be called to get it to forget past commands. Without forgetting
# past commands the $PATH changes we made may not be respected
if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then
hash -r 2>/dev/null
fi

View File

@ -1,55 +0,0 @@
# This file must be used with "source bin/activate.csh" *from csh*.
# You cannot run it directly.
# Created by Davide Di Blasi <davidedb@gmail.com>.
set newline='\
'
alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PATH:q" && unset _OLD_VIRTUAL_PATH; rehash; test $?_OLD_VIRTUAL_PROMPT != 0 && set prompt="$_OLD_VIRTUAL_PROMPT:q" && unset _OLD_VIRTUAL_PROMPT; unsetenv VIRTUAL_ENV; test "\!:*" != "nondestructive" && unalias deactivate && unalias pydoc'
# Unset irrelevant variables.
deactivate nondestructive
setenv VIRTUAL_ENV '/home/raphael/dev/git/calendarwatch_frontend/calendarwatch'
set _OLD_VIRTUAL_PATH="$PATH:q"
setenv PATH "$VIRTUAL_ENV:q/bin:$PATH:q"
if ('' != "") then
set env_name = ''
else
set env_name = '('"$VIRTUAL_ENV:t:q"') '
endif
if ( $?VIRTUAL_ENV_DISABLE_PROMPT ) then
if ( $VIRTUAL_ENV_DISABLE_PROMPT == "" ) then
set do_prompt = "1"
else
set do_prompt = "0"
endif
else
set do_prompt = "1"
endif
if ( $do_prompt == "1" ) then
# Could be in a non-interactive environment,
# in which case, $prompt is undefined and we wouldn't
# care about the prompt anyway.
if ( $?prompt ) then
set _OLD_VIRTUAL_PROMPT="$prompt:q"
if ( "$prompt:q" =~ *"$newline:q"* ) then
:
else
set prompt = "$env_name:q$prompt:q"
endif
endif
endif
unset env_name
unset do_prompt
alias pydoc python -m pydoc
rehash

View File

@ -1,100 +0,0 @@
# This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*.
# Do not run it directly.
function _bashify_path -d "Converts a fish path to something bash can recognize"
set fishy_path $argv
set bashy_path $fishy_path[1]
for path_part in $fishy_path[2..-1]
set bashy_path "$bashy_path:$path_part"
end
echo $bashy_path
end
function _fishify_path -d "Converts a bash path to something fish can recognize"
echo $argv | tr ':' '\n'
end
function deactivate -d 'Exit virtualenv mode and return to the normal environment.'
# reset old environment variables
if test -n "$_OLD_VIRTUAL_PATH"
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
if test (echo $FISH_VERSION | head -c 1) -lt 3
set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH")
else
set -gx PATH "$_OLD_VIRTUAL_PATH"
end
set -e _OLD_VIRTUAL_PATH
end
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME"
set -e _OLD_VIRTUAL_PYTHONHOME
end
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
and functions -q _old_fish_prompt
# Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
set -l fish_function_path
# Erase virtualenv's `fish_prompt` and restore the original.
functions -e fish_prompt
functions -c _old_fish_prompt fish_prompt
functions -e _old_fish_prompt
set -e _OLD_FISH_PROMPT_OVERRIDE
end
set -e VIRTUAL_ENV
if test "$argv[1]" != 'nondestructive'
# Self-destruct!
functions -e pydoc
functions -e deactivate
functions -e _bashify_path
functions -e _fishify_path
end
end
# Unset irrelevant variables.
deactivate nondestructive
set -gx VIRTUAL_ENV '/home/raphael/dev/git/calendarwatch_frontend/calendarwatch'
# https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
if test (echo $FISH_VERSION | head -c 1) -lt 3
set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH)
else
set -gx _OLD_VIRTUAL_PATH "$PATH"
end
set -gx PATH "$VIRTUAL_ENV"'/bin' $PATH
# Unset `$PYTHONHOME` if set.
if set -q PYTHONHOME
set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME
set -e PYTHONHOME
end
function pydoc
python -m pydoc $argv
end
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
# Copy the current `fish_prompt` function as `_old_fish_prompt`.
functions -c fish_prompt _old_fish_prompt
function fish_prompt
# Run the user's prompt first; it might depend on (pipe)status.
set -l prompt (_old_fish_prompt)
# Prompt override provided?
# If not, just prepend the environment name.
if test -n ''
printf '%s%s' '' (set_color normal)
else
printf '%s(%s) ' (set_color normal) (basename "$VIRTUAL_ENV")
end
string join -- \n $prompt # handle multi-line prompts
end
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
end

View File

@ -1,60 +0,0 @@
$script:THIS_PATH = $myinvocation.mycommand.path
$script:BASE_DIR = Split-Path (Resolve-Path "$THIS_PATH/..") -Parent
function global:deactivate([switch] $NonDestructive) {
if (Test-Path variable:_OLD_VIRTUAL_PATH) {
$env:PATH = $variable:_OLD_VIRTUAL_PATH
Remove-Variable "_OLD_VIRTUAL_PATH" -Scope global
}
if (Test-Path function:_old_virtual_prompt) {
$function:prompt = $function:_old_virtual_prompt
Remove-Item function:\_old_virtual_prompt
}
if ($env:VIRTUAL_ENV) {
Remove-Item env:VIRTUAL_ENV -ErrorAction SilentlyContinue
}
if (!$NonDestructive) {
# Self destruct!
Remove-Item function:deactivate
Remove-Item function:pydoc
}
}
function global:pydoc {
python -m pydoc $args
}
# unset irrelevant variables
deactivate -nondestructive
$VIRTUAL_ENV = $BASE_DIR
$env:VIRTUAL_ENV = $VIRTUAL_ENV
New-Variable -Scope global -Name _OLD_VIRTUAL_PATH -Value $env:PATH
$env:PATH = "$env:VIRTUAL_ENV/bin:" + $env:PATH
if (!$env:VIRTUAL_ENV_DISABLE_PROMPT) {
function global:_old_virtual_prompt {
""
}
$function:_old_virtual_prompt = $function:prompt
if ("" -ne "") {
function global:prompt {
# Add the custom prefix to the existing prompt
$previous_prompt_value = & $function:_old_virtual_prompt
("" + $previous_prompt_value)
}
}
else {
function global:prompt {
# Add a prefix to the current prompt, but don't discard it.
$previous_prompt_value = & $function:_old_virtual_prompt
$new_prompt_value = "($( Split-Path $env:VIRTUAL_ENV -Leaf )) "
($new_prompt_value + $previous_prompt_value)
}
}
}

View File

@ -1,46 +0,0 @@
"""Xonsh activate script for virtualenv"""
from xonsh.tools import get_sep as _get_sep
def _deactivate(args):
if "pydoc" in aliases:
del aliases["pydoc"]
if ${...}.get("_OLD_VIRTUAL_PATH", ""):
$PATH = $_OLD_VIRTUAL_PATH
del $_OLD_VIRTUAL_PATH
if ${...}.get("_OLD_VIRTUAL_PYTHONHOME", ""):
$PYTHONHOME = $_OLD_VIRTUAL_PYTHONHOME
del $_OLD_VIRTUAL_PYTHONHOME
if "VIRTUAL_ENV" in ${...}:
del $VIRTUAL_ENV
if "VIRTUAL_ENV_PROMPT" in ${...}:
del $VIRTUAL_ENV_PROMPT
if "nondestructive" not in args:
# Self destruct!
del aliases["deactivate"]
# unset irrelevant variables
_deactivate(["nondestructive"])
aliases["deactivate"] = _deactivate
$VIRTUAL_ENV = r"/home/raphael/dev/git/calendarwatch_frontend/calendarwatch"
$_OLD_VIRTUAL_PATH = $PATH
$PATH = $PATH[:]
$PATH.add($VIRTUAL_ENV + _get_sep() + "bin", front=True, replace=True)
if ${...}.get("PYTHONHOME", ""):
# unset PYTHONHOME if set
$_OLD_VIRTUAL_PYTHONHOME = $PYTHONHOME
del $PYTHONHOME
$VIRTUAL_ENV_PROMPT = ""
if not $VIRTUAL_ENV_PROMPT:
del $VIRTUAL_ENV_PROMPT
aliases["pydoc"] = ["python", "-m", "pydoc"]

View File

@ -1,32 +0,0 @@
# -*- coding: utf-8 -*-
"""Activate virtualenv for current interpreter:
Use exec(open(this_file).read(), {'__file__': this_file}).
This can be used when you must use an existing Python interpreter, not the virtualenv bin/python.
"""
import os
import site
import sys
try:
abs_file = os.path.abspath(__file__)
except NameError:
raise AssertionError("You must use exec(open(this_file).read(), {'__file__': this_file}))")
bin_dir = os.path.dirname(abs_file)
base = bin_dir[: -len("bin") - 1] # strip away the bin part from the __file__, plus the path separator
# prepend bin to PATH (this file is inside the bin directory)
os.environ["PATH"] = os.pathsep.join([bin_dir] + os.environ.get("PATH", "").split(os.pathsep))
os.environ["VIRTUAL_ENV"] = base # virtual env is right above bin directory
# add the virtual environments libraries to the host python import mechanism
prev_length = len(sys.path)
for lib in "../lib/python3.7/site-packages".split(os.pathsep):
path = os.path.realpath(os.path.join(bin_dir, lib))
site.addsitedir(path.decode("utf-8") if "" else path)
sys.path[:] = sys.path[prev_length:] + sys.path[0:prev_length]
sys.real_prefix = sys.prefix
sys.prefix = base

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from alembic.config import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from chardet.cli.chardetect import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from dotenv.cli import cli
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(cli())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from setuptools.command.easy_install import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from email_validator import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from flask.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,137 +0,0 @@
#!/usr/bin/python
# Python bindings to the Google search engine
# Copyright (c) 2009-2019, Mario Vilas
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright
# notice,this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
# * Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
import sys
from googlesearch import search, get_random_user_agent
# TODO port to argparse
from optparse import OptionParser, IndentedHelpFormatter
class BannerHelpFormatter(IndentedHelpFormatter):
"Just a small tweak to optparse to be able to print a banner."
def __init__(self, banner, *argv, **argd):
self.banner = banner
IndentedHelpFormatter.__init__(self, *argv, **argd)
def format_usage(self, usage):
msg = IndentedHelpFormatter.format_usage(self, usage)
return '%s\n%s' % (self.banner, msg)
def main():
# Parse the command line arguments.
formatter = BannerHelpFormatter(
"Python script to use the Google search engine\n"
"By Mario Vilas (mvilas at gmail dot com)\n"
"https://github.com/MarioVilas/googlesearch\n"
)
parser = OptionParser(formatter=formatter)
parser.set_usage("%prog [options] query")
parser.add_option(
'--tld', metavar='TLD', type='string', default='com',
help="top level domain to use [default: com]")
parser.add_option(
'--lang', metavar='LANGUAGE', type='string', default='en',
help="produce results in the given language [default: en]")
parser.add_option(
'--domains', metavar='DOMAINS', type='string', default='',
help="comma separated list of domains to constrain the search to")
parser.add_option(
'--tbs', metavar='TBS', type='string', default='0',
help="produce results from period [default: 0]")
parser.add_option(
'--safe', metavar='SAFE', type='string', default='off',
help="kids safe search [default: off]")
parser.add_option(
'--type', metavar='TYPE', type='string', default='search', dest='tpe',
help="search type (search, images, videos, news, shopping, books,"
" apps) [default: search]")
parser.add_option(
'--country', metavar='COUNTRY', type='string', default='',
help="region to restrict search on [default: not restricted]")
parser.add_option(
'--num', metavar='NUMBER', type='int', default=10,
help="number of results per page [default: 10]")
parser.add_option(
'--start', metavar='NUMBER', type='int', default=0,
help="first result to retrieve [default: 0]")
parser.add_option(
'--stop', metavar='NUMBER', type='int', default=0,
help="last result to retrieve [default: unlimited]")
parser.add_option(
'--pause', metavar='SECONDS', type='float', default=2.0,
help="pause between HTTP requests [default: 2.0]")
parser.add_option(
'--rua', metavar='USERAGENT', action='store_true', default=False,
help="Randomize the User-Agent [default: no]")
(options, args) = parser.parse_args()
query = ' '.join(args)
if not query:
parser.print_help()
sys.exit(2)
params = [
(k, v) for (k, v) in options.__dict__.items()
if not k.startswith('_')]
params = dict(params)
# Split the comma separated list of domains, if present.
if 'domains' in params:
params['domains'] = [x.strip() for x in params['domains'].split(',')]
# Use a special search type if requested.
if 'tpe' in params:
tpe = params['tpe']
if tpe and tpe not in (
'search', 'images', 'videos', 'news',
'shopping', 'books', 'apps'):
parser.error("invalid type: %r" % tpe)
if tpe == 'search':
params['tpe'] = ''
# Randomize the user agent if requested.
if 'rua' in params and params.pop('rua'):
params['user_agent'] = get_random_user_agent()
# Run the query.
for url in search(query, **params):
print(url)
try:
sys.stdout.flush()
except Exception:
pass
if __name__ == '__main__':
main()

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from google_auth_oauthlib.tool.__main__ import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from mako.cmd import cmdline
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(cmdline())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from pip._internal.cli.main import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import decrypt
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(decrypt())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import encrypt
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(encrypt())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import keygen
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(keygen())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from rsa.util import private_to_public
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(private_to_public())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import sign
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(sign())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from rsa.cli import verify
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(verify())

View File

@ -1 +0,0 @@
/usr/bin/python3

View File

@ -1 +0,0 @@
python

View File

@ -1 +0,0 @@
python

Binary file not shown.

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
#!/home/raphael/dev/git/calendarwatch_frontend/calendarwatch/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from wheel.cli import main
if __name__ == '__main__':
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
sys.exit(main())

View File

@ -1,8 +0,0 @@
home = /usr
implementation = CPython
version_info = 3.7.3.final.0
virtualenv = 20.0.20
include-system-site-packages = false
base-prefix = /usr
base-exec-prefix = /usr
base-executable = /usr/bin/python3

View File

@ -93,6 +93,13 @@ def verifyResponse():
def get_google_provider_cfg():
return requests.get(GOOGLE_DISCOVERY_URL).json()
def deleteAccount(user):
result = requests.post('https://oauth2.googleapis.com/revoke',
params={'token': user.get('token')},
headers = {'content-type': 'applixation/x-www-form-urlencoded'})
print(result, flush=True)
return
class Calendar:
def __init__(self, name, calendarId, toggle='False', color="#000000"):
self.name = name
@ -138,6 +145,8 @@ def updateCalendars():
# a = flask.session['credentials']
# print(a, flush=True)
# print(current_user.getGoogleCredentials(), flush=True)
if current_user.getGoogleCredentials() == None:
return
credentials = google.oauth2.credentials.Credentials(**current_user.getGoogleCredentials())
calendars = caltojson.getCalendarList(credentials)

View File

@ -6,7 +6,7 @@ import sqlite3
# Third-party libraries
import flask
from flask import render_template, flash
from flask import Flask, redirect, request, url_for
from flask import Flask, redirect, request, url_for, jsonify
from flask_login import (
LoginManager,
current_user,
@ -18,6 +18,7 @@ import requests
import server.googleHandler as google
from backend.Routine import Routine
from server import login_manager, app, db
from server.forms import LoginForm, RegistrationForm, DeviceForm
from server.models import User, Calendar, Device
@ -100,16 +101,25 @@ def register():
return redirect(url_for('emaillogin'))
return flask.render_template('register.html', title='Register', form=form)
@app.route("/test")
def testAPI():
if current_user.is_authenticated:
google.updateCalendars()
return redirect('/account')
@app.route("/delete_account")
def deleteAccount():
if not current_user.is_authenticated:
return redirect(url_for('account'))
print(current_user.getGoogleCredentials(), flush=True)
google.deleteAccount(current_user.getGoogleCredentials())
user = db.session.query(User).filter(User.id==current_user.id).first()
logout_user()
db.session.delete(user)
db.session.commit()
return redirect(url_for('account'))
@app.route("/login/google")
def googlelogin():
if current_user.is_authenticated and current_user.getGoogleCredentials() != None:
return redirect(url_for('account'))
authorization_url = google.login()
return flask.redirect(authorization_url)
@ -117,6 +127,9 @@ def googlelogin():
@app.route("/login/google/callback")
def callback():
session, credentials = google.verifyResponse()
if current_user.is_authenticated and current_user.getGoogleCredentials == None:
current_user.setGoogleCredentials(credentials)
userinfo = session.get('https://www.googleapis.com/userinfo/v2/me').json()
# Create a user in your db with the information provided
@ -160,11 +173,25 @@ def credentials_to_dict(credentials):
'scopes': credentials.scopes}
@app.route("/userinfo/<path:user>/calendarevents.json")
def downloader(user):
path = "/home/calendarwatch/userinfo/" + user + "/"
print(path, flush=True)
return flask.send_from_directory(path, "calendarevents.json")
@app.route("/userinfo/<path:device>/calendarevents.json")
def downloader(device):
path = "/home/calendarwatch/userinfo/" + device + "/"
# return flask.send_from_directory(path, "calendarevents.json")
request_user = db.session.query(User).filter(User.id==device).first()
if request_user == None:
return jsonify(kind="unregistered")
routine = Routine()
routine.updateCalendar(request_user)
return jsonify(request_user.getJson())
@app.route("/devicefingerprint.json")
def generateDeviceFingerprint():
# Create Three Random Words
# check not in Device Database
# Save as new Device
# Send to User
return jsonify(deviceId="Carrot-Enamel-Storm")
# POST

Binary file not shown.

View File

@ -227,6 +227,10 @@ body *
color: #333;
}
.grey {
background-color: #ddd;
}
.sub.container .name {
margin-right: 1rem;
}

View File

@ -31,8 +31,12 @@
</div>
{% endfor %}
<div id=calendars class="container">
<a class="button" href="login/google">Google Calendar</a>
<a class="button" href="#" >Nextcloud Calendar</a>
</div>
<div class="container">
<div class="button addcalendar" style="width: auto; margin: 4rem">Add Calendar</div>
<a class="button addcalendar" href="/login/google" style="width: auto; margin: 4rem">Add Calendar</a>
</div>
<script type="text/javascript">

View File

@ -3,33 +3,33 @@
<div class="container">
<div style="font-weight: bold;width: 15rem; margin: 1rem">Device ID</div>
<div style="font-weight: bold;width: 10rem; margin: 1rem; padding-right: 5rem">Link Status</div>
<div style="font-weight: bold;width: 2rem; margin: 1rem">Action</div>
<div style="font-weight: bold;width: 10rem; margin: 1rem; padding-right: 4rem">Link Status</div>
<div style="font-weight: bold;width: 4rem; margin: 1rem">Action</div>
</div>
{% for item in devices %}
<div class="container">
<!--Name-->
<!--device id-->
<div style="width: 15rem; margin: 1rem;">{{ item.deviceId }}</div>
<!--Toggle-->
<div style="width: 10rem; margin: 1rem; padding-right: 5rem">
<!--link status-->
<div style="width: 10rem; margin: 1rem; padding-right: 4rem">
Connected
</div>
<!--Color Selector-->
<div style="width: 2rem; margin: 1rem;">
<!--action button-->
<div style="width: 4rem; margin: 1rem;">
<button type="button">Unlink</button>
</div>
</div>
{% endfor %}
<form action="" method="post">
<div class="container">
<div style="margin: 2rem">{{ form.hidden_tag() }}</div>
<div style="margin: 2rem">{{ form.deviceId.label }}</div>
<div style="margin: 2rem">{{ form.deviceId(size=32) }}</div>
<div style="margin: 2rem">{{ form.submit() }}</div>
<div class="container grey" style="margin-top: 3rem;">
<div>{{ form.hidden_tag() }}</div>
<div style="width: 7rem; margin: 1rem">{{ form.deviceId.label }}</div>
<div style="width: 12rem; margin: 1rem">{{ form.deviceId(size=24) }}</div>
<div style="with: 7rem; margin: 1rem">{{ form.submit() }}</div>
</div>
</form>