├── backend ├── appengine │ ├── static │ │ ├── robots.txt │ │ ├── img │ │ │ ├── ajax.gif │ │ │ └── favicon.ico │ │ ├── font-awesome-4.2.0 │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ └── fontawesome-webfont.woff │ │ │ └── css │ │ │ │ └── font-awesome.min.css │ │ ├── bootstrap │ │ │ ├── fonts │ │ │ │ ├── glyphicons-halflings-regular.eot │ │ │ │ ├── glyphicons-halflings-regular.ttf │ │ │ │ └── glyphicons-halflings-regular.woff │ │ │ └── css │ │ │ │ ├── bootstrap-theme.min.css │ │ │ │ ├── bootstrap-social.css │ │ │ │ ├── bootstrap-theme.css.map │ │ │ │ └── bootstrap-theme.css │ │ ├── css │ │ │ └── default.css │ │ └── permission │ │ │ ├── html │ │ │ ├── group_td.html │ │ │ ├── permission_form.html │ │ │ └── permission_table.html │ │ │ └── js │ │ │ └── permissions.js │ ├── routes │ │ ├── __init__.py │ │ ├── admin │ │ │ ├── __init__.py │ │ │ └── home.py │ │ ├── cookie │ │ │ ├── __init__.py │ │ │ └── tasks.py │ │ ├── login │ │ │ ├── __init__.py │ │ │ ├── pending.py │ │ │ ├── home.py │ │ │ ├── google.py │ │ │ ├── passwordless.py │ │ │ └── facebook.py │ │ ├── permission │ │ │ ├── __init__.py │ │ │ ├── home.py │ │ │ └── admin.py │ │ ├── home.py │ │ ├── logout.py │ │ ├── warmup.py │ │ └── account.py │ ├── config │ │ ├── __init__.py │ │ ├── template.py │ │ └── template_middleware.py │ ├── cron.yaml │ ├── templates │ │ ├── admin │ │ │ ├── base.html │ │ │ └── home.html │ │ ├── base │ │ │ ├── 404.html │ │ │ ├── 400.html │ │ │ └── base.html │ │ ├── updown │ │ │ ├── ok.html │ │ │ └── home.html │ │ ├── login │ │ │ ├── passwordless │ │ │ │ ├── home.html │ │ │ │ └── form.html │ │ │ ├── pending.html │ │ │ ├── facebook │ │ │ │ └── form.html │ │ │ └── home.html │ │ ├── permission │ │ │ ├── home.html │ │ │ ├── account_form.html │ │ │ └── admin.html │ │ ├── home.html │ │ └── multitenant │ │ │ └── home.html │ ├── index.yaml │ ├── app.yaml │ ├── convention.py │ └── settings.py ├── venv │ ├── dev_requirements.txt │ ├── requirements.txt │ ├── venv.sh │ └── venv.bat ├── test │ ├── admin_tests │ │ ├── __init__.py │ │ └── home_tests.py │ ├── login_tests │ │ ├── __init__.py │ │ ├── home_tests.py │ │ ├── logout.py │ │ ├── google.py │ │ ├── facebook.py │ │ └── passwordless.py │ ├── warmup_tests.py │ ├── HomeTests.py │ ├── cookie_tests.py │ ├── testloader.py │ ├── account_tests.py │ ├── permission_tests.py │ ├── multitenancy_tests.py │ └── base.py ├── apps │ ├── locale_app │ │ ├── __init__.py │ │ └── middleware.py │ ├── permission_app │ │ ├── __init__.py │ │ └── model.py │ └── multitenancy.py └── build_scripts │ └── babel │ ├── babel.cfg │ ├── i18n_extractor.py │ └── locale │ ├── en_US │ └── LC_MESSAGES │ │ └── messages.po │ └── pt_BR │ └── LC_MESSAGES │ └── messages.po ├── .gitignore ├── LICENSE └── README.md /backend/appengine/static/robots.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /backend/venv/dev_requirements.txt: -------------------------------------------------------------------------------- 1 | -r requirements.txt 2 | mock==1.0.1 3 | mommygae==1.1 4 | -------------------------------------------------------------------------------- /backend/appengine/static/img/ajax.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzon/tekton/HEAD/backend/appengine/static/img/ajax.gif -------------------------------------------------------------------------------- /backend/test/admin_tests/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals -------------------------------------------------------------------------------- /backend/test/login_tests/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals -------------------------------------------------------------------------------- /backend/appengine/routes/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | -------------------------------------------------------------------------------- /backend/appengine/config/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | 4 | -------------------------------------------------------------------------------- /backend/appengine/static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzon/tekton/HEAD/backend/appengine/static/img/favicon.ico -------------------------------------------------------------------------------- /backend/apps/locale_app/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | 4 | -------------------------------------------------------------------------------- /backend/apps/permission_app/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | 4 | -------------------------------------------------------------------------------- /backend/appengine/routes/admin/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | 4 | -------------------------------------------------------------------------------- /backend/appengine/routes/cookie/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | 4 | -------------------------------------------------------------------------------- /backend/appengine/routes/login/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | 4 | -------------------------------------------------------------------------------- /backend/appengine/routes/permission/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | 4 | -------------------------------------------------------------------------------- /backend/appengine/cron.yaml: -------------------------------------------------------------------------------- 1 | cron: 2 | - description: application secret renew 3 | url: /cookie/tasks/renew 4 | schedule: every sunday 04:00 5 | -------------------------------------------------------------------------------- /backend/appengine/templates/admin/base.html: -------------------------------------------------------------------------------- 1 | {% extends 'base/base.html' %} 2 | {% block tabs %} 3 | {{ select_tab('ADMIN') }} 4 | {% endblock %} -------------------------------------------------------------------------------- /backend/build_scripts/babel/babel.cfg: -------------------------------------------------------------------------------- 1 | [jinja2: **/templates/**] 2 | encoding = utf-8 3 | [python: **.py] 4 | [extractors] 5 | jinja2 = jinja2.ext:babel_extract 6 | -------------------------------------------------------------------------------- /backend/appengine/static/font-awesome-4.2.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzon/tekton/HEAD/backend/appengine/static/font-awesome-4.2.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /backend/apps/permission_app/model.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | 4 | ADMIN = 'ADMIN' 5 | 6 | ALL_PERMISSIONS_LIST = [ADMIN] -------------------------------------------------------------------------------- /backend/appengine/static/bootstrap/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzon/tekton/HEAD/backend/appengine/static/bootstrap/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /backend/appengine/static/bootstrap/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzon/tekton/HEAD/backend/appengine/static/bootstrap/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /backend/appengine/static/bootstrap/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzon/tekton/HEAD/backend/appengine/static/bootstrap/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /backend/appengine/static/font-awesome-4.2.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzon/tekton/HEAD/backend/appengine/static/font-awesome-4.2.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /backend/appengine/static/font-awesome-4.2.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzon/tekton/HEAD/backend/appengine/static/font-awesome-4.2.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /backend/appengine/static/font-awesome-4.2.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/renzon/tekton/HEAD/backend/appengine/static/font-awesome-4.2.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /backend/venv/requirements.txt: -------------------------------------------------------------------------------- 1 | tekton==4.3 2 | gaebusiness==4.5.3 3 | gaecookie==0.7 4 | gaeforms==0.14 5 | gaegraph==3.9 6 | gaepermission==0.12 7 | pytz==2014.4 8 | Babel==1.3 9 | python-slugify==0.0.7 10 | Jinja2==2.7.3 11 | -------------------------------------------------------------------------------- /backend/test/warmup_tests.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | from base import GAETestCase 4 | from routes.warmup import BaseHandler 5 | 6 | 7 | class BaseTest(GAETestCase): 8 | def test_warmup_success(self): 9 | BaseHandler().get() -------------------------------------------------------------------------------- /backend/test/HomeTests.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | from base import GAETestCase 4 | from routes import home 5 | 6 | 7 | class HomeTests(GAETestCase): 8 | def test_index(self): 9 | response = home.index() 10 | self.assert_can_render(response) 11 | -------------------------------------------------------------------------------- /backend/test/admin_tests/home_tests.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | from base import GAETestCase 4 | from routes.admin.home import index 5 | 6 | 7 | class HomeTests(GAETestCase): 8 | def test_index(self): 9 | response = index() 10 | self.assert_can_render(response) 11 | -------------------------------------------------------------------------------- /backend/test/login_tests/home_tests.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | from base import GAETestCase 4 | from routes.login import home 5 | 6 | 7 | class HomeTests(GAETestCase): 8 | def test_index(self): 9 | response = home.index() 10 | self.assert_can_render(response) 11 | -------------------------------------------------------------------------------- /backend/appengine/routes/cookie/tasks.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import absolute_import, unicode_literals 3 | from gaecookie import facade 4 | from gaecookie.decorator import no_csrf 5 | from gaepermission.decorator import login_not_required 6 | 7 | 8 | @login_not_required 9 | @no_csrf 10 | def renew(): 11 | facade.renew().execute() 12 | -------------------------------------------------------------------------------- /backend/appengine/static/css/default.css: -------------------------------------------------------------------------------- 1 | .footer { 2 | margin-top: 30px; 3 | padding-top: 10px; 4 | bottom: 0; 5 | width: 100%; 6 | /* Set the fixed height of the footer here */ 7 | height: 60px; 8 | border-top: solid #DDDDDD 1px; 9 | background-color: #f5f5f5; 10 | } 11 | .pad8 { 12 | margin: 8px 15px; 13 | color: #777 14 | } 15 | 16 | -------------------------------------------------------------------------------- /backend/appengine/templates/base/404.html: -------------------------------------------------------------------------------- 1 | {% extends 'base/base.html' %} 2 | {% block body %} 3 |
{{ g }}
11 |
12 |
10 |
11 |
12 | {% trans %}We will send you an email with the login link using 9 | Passwordless.{% endtrans %}
10 | 11 |{% trans %}Check your spam box, once some providers can filter this email.{% endtrans %}
12 |{% trans %}The email provided by {{ provider }} is already in use. For your security, we are going to 9 | send an email to {{ email }} to ensure it is yours.{% endtrans %}
10 | 11 |{% trans %}This security procedure will be necessary only this time.{% endtrans %}
12 | 13 |{% trans %}Check your spam box, once some providers can filter this email.{% endtrans %}
{% trans %}This data is used to proceed passswordless login. More information in{% endtrans %} Passwordless. 10 |
11 | 12 | 20 || Id | 7 |Name | 9 |Groups | 10 ||
|---|---|---|---|
| {{ u.id }} | 14 |{{ u.email }} | 15 |{{ u.name }} | 16 |
17 | |
19 |
26 | {% trans %}This data is used to proceed Facebook login. More information in{% endtrans %} {% trans %}Facebook Login Docs{% endtrans %}.
11 | 12 | 20 || {% trans %}Path{% endtrans %} | 11 |{% trans %}Allowed Groups{% endtrans %} | 12 |{% trans %}CSRF Security{% endtrans %} | 13 |
|---|---|---|
| {{ info.path }} | 19 |{{ info.groups }} | 20 |21 | 22 | {{ _('Secure') if info.csrf else _('Unsecure') }} 23 | 24 | | 25 |
{% trans %}A Full-Stack project for Google App Engine{% endtrans %}
12 |25 | {% trans %} Check Courses App 26 | Out{% endtrans %} » 27 |
28 |{% trans %}A Full-Stack project for Google App Engine{% endtrans %}
12 |But this is the multinant version ;)
13 |26 | {% trans %} Check Courses App 27 | Out{% endtrans %} » 28 |
29 |