Commit Graph

92 Commits

Author SHA1 Message Date
4425771117 Suppress Cerberus deprecation warning caused by Eve
Eve is falling behind on Cerberus. See my bug report on
https://github.com/pyeve/eve/issues/1278 for more info.
2019-05-29 14:32:46 +02:00
f53217cabf Added some type declarations 2019-05-29 12:58:40 +02:00
85706fc264 Updated bug report URLs
The project was apparently moved. The issues are closed, too, though, so
we could at some point check whether our workarounds can be removed.
2019-03-27 11:58:48 +01:00
5075cd5bd0 Introducing Flask Debug Toolbar
Display useful information for debugging.
2018-11-01 02:19:13 +01:00
9a9ca1bf8b Synchronise badges with Blender ID
Synchronisation is performed in the background by the Celery Beat, every
10 minutes. It has a time limit of 9 minutes to prevent multiple refresh
tasks from running at the same time.

Synchronisation is also possible with the `manage.py badges sync` CLI
command, which can sync either a single user or all users.
2018-09-12 15:02:19 +02:00
6bcce87bb9 Sort celery task modules alphabetically 2018-09-12 15:02:19 +02:00
e19dd27099 API endpoint /api/nodes/tagged/<tag>
This endpoint returns nodes in public projects that have the given tag.
The returned JSON is cached for 5 minutes.
2018-09-06 15:42:50 +02:00
586d9c0d3b Create MongoDB indices at Pillar startup, and not at first request
This makes things a little more predictable, and allowed me to actually
find & fix a bug in a unittest.
2018-09-06 15:42:20 +02:00
549cf0a3e8 WIP on libraries upgrade 2018-07-12 15:23:57 +02:00
53b6210531 Remove unneeded file opening
The statement has been moved to the Docker file of blender-cloud,
where we actually append a generated STATIC_FILE_HASH.
2018-04-21 18:09:42 +02:00
e69f991aa6 Update flask_wtf to 0.14.2 and make CSRFProtect available to current_app
By default CSRF protection is disabled for all views, since most
web endpoints and all API endpoints do not need it.
On the views that require it, we use the 
current_app.csrf.protect() method.
2018-03-28 22:05:54 +02:00
d2a0a5ae26 Added CLI command 'maintenance purge_home_projects'
This command soft-deletes home projects when their owning user is no longer
there.
2018-03-27 15:45:32 +02:00
de8bff51b5 Added TODO: keep Sentry unconfigured when running CLI commands.
When running CLI stuff the logging is seen by human eyes anyway, so we
don't need to send things to Sentry.
2018-03-27 11:50:23 +02:00
12272750c3 T53890: Improving static content serving
Static files are now served with an 8-character hash before the last
extension. For example, `tutti.min.js` is now served as
`tutti.min.abcd1234.js`. When doing a request the hash is removed before
serving the static file.

The hash must be 8 characters long, and is taken from STATIC_FILE_HASH.
It is up to the deployment to change this configuration variable
whenever static files change. This forces browsers that download newly
deployed HTML to also refresh the dependencies (most importantly
JS/CSS).

For this to work, the URL must be built with `url_for('static_xxx',
filename='/path/to/file')`. The 'static' module still returns regular,
hashless URLs.
2018-03-23 17:36:14 +01:00
678f72766e Change elif to if _validate_config
Elif is not needed after a raise.
2018-03-20 10:05:17 +01:00
99e0eb7a7a Require SERVER_NAME in the configuration
Since we rely more and more on the presence of SERVER_NAME in the
configuration, we make it a hard requirement, before checking if it is
a FQDN.
2018-03-18 18:53:08 +01:00
6a0e0721e9 Require SERVER_NAME to be a FQDN with TLD
A fully-qualified domain name, including a top-level domain name, is
required for Chrome to accept session cookies. For more info, see
https://stackoverflow.com/questions/27254013/why-does-the-session-cookie-work-when-serving-from-a-domain-but-not-when-using-a#27276450
2018-03-15 11:39:20 +01:00
1b57b333df Removed the URLer service
We don't have a need for it any more, so it can go.
2018-01-31 14:33:41 +01:00
c44f0489bc Backend support for organization IP ranges.
We can now store IP ranges with Organizations. The aim is to have any user
logging in with a remote IP address within such a race will get the
organization roles assigned to the user object stored in the Flask session.

This commit just contains the MongoDB storage and querying, and not yet the
updates to the user.
2018-01-25 14:01:28 +01:00
1d08f6850b Elastic: paralellise reindexing
It's marginally faster (on our production DB user reindexing goes down from
5+ minutes to 4 minutes), but will likely become significantly faster when
we run ElasticSearch on its own machine.
2018-01-09 17:05:31 +01:00
24d38fe52e Merge branch 'master' of git.blender.org:pillar into elastic 2018-01-05 10:56:46 +01:00
c7ba775048 Removed some traces of Bugsnag 2018-01-03 11:10:01 +01:00
d726e15ed8 Merge branch 'master' of git.blender.org:pillar into elastic 2017-12-29 12:19:47 +01:00
766e766f50 Declare some parameter types 2017-12-22 16:25:12 +01:00
8ca6b4cdb0 Added Celery task for queued email sending.
Upon IOError or OSError (which includes SMTP protocol errors) the mail
sending task is retried after MAIL_RETRY seconds. It is retried three
times (default setting of Celery) only.
2017-12-21 13:17:57 +01:00
ef1609efc2 Added abs_url() Jinja function for proper absolute URLs
abs_url(x) is a shortcut for url_for(x, _external=True,
 _schema=app.config['SCHEMA']), and should be used for all URLs that should
include the hostname and schema.
2017-12-21 12:58:06 +01:00
3ea2504e8c Log more information in Sentry 2017-12-08 14:46:01 +01:00
b7773e69c7 Merge branch 'master' into elastic 2017-12-08 12:55:57 +01:00
dfc224d8a9 Added capability 'encode-video' and role 'video-encoder'.
Both 'video-encoder' and 'admin' roles get 'encode-video' capability,
which allows users to upload video that gets encoded & displayed as a
video. For users without this capability videos are handled as regular
downloads.
2017-12-07 16:51:16 +01:00
fc25ca9c03 Replaced Bugsnag with Sentry - requires config changes!
Note that pillar/bugsnag_extra.py still exists; I'm keeping it around for
a while until we know what info we miss in Sentry, can port it, and then
remove/refactor it.
2017-12-07 12:58:21 +01:00
1e012f860b Registered org-subscriber role so that it shows in the admin 2017-12-06 11:58:21 +01:00
d2a8f2a47f T53161 elasticsearch can index nodes now. cli command. NOTE config changes!! 2017-11-17 16:06:51 +01:00
43fa8f1a45 T53161 WIP create elasticsearch app / doc / stuff 2017-11-17 16:06:01 +01:00
2233d015f3 T53161 start working on elastic.. 2017-11-17 16:06:01 +01:00
8427f03df4 Fixed bug loading extension config defaults 2017-11-03 14:31:56 +01:00
053e681d00 Create MongoDB index on tokens.token_hashed 2017-10-05 19:40:41 +02:00
c57aefd48b Hash authentication tokens before storing in the database. 2017-10-05 12:57:16 +02:00
6a541e0662 Improved bugsnag reporting
- Include release stage, which should be 'production' or 'development',
  and gets postfixed by '-debug' when running in debug mode.
- Properly logging remote IP address when proxied through HAProxy;
- Log user ID, email, username, roles, and capabilities;
- Remove authentication tokens from logged session;
- Log request data and JSON separately.
- Added request endpoint.
2017-09-28 13:28:19 +02:00
2d18057c6e Added DB index for latest assets/comments 2017-09-15 17:09:15 +02:00
82d2921424 Added support for periodic Celery tasks.
You have to run "manage.py celery beat" for this to work too. Run
"manage.py celery beat -- --help" to get CLI option help.
2017-09-14 16:00:59 +02:00
5d137ac997 Added Celery task for refreshing file links
This includes a CLI command to kick off a single run for the Celery task.

This does *NOT* include a check to see whether the task is already running!
2017-09-14 15:12:25 +02:00
18eb84fa9d Log capabilities at DEBUG level. 2017-09-13 16:36:36 +02:00
1a505bb0a2 Work around bugsnag issue
3263f0a551 didn't fix it in production.
2017-09-13 16:36:29 +02:00
8aa6bb61dd Slightly nicer initialisation of Bugsnag 2017-09-13 16:02:48 +02:00
ab7d623d27 Create some indices used for statistics 2017-09-12 11:58:31 +02:00
Dalai Felinto
303a33c3bf Internationalization: Backend support to localization based on user browser
User experience
===============
For users it means we can provide localized web-sites to enrich their
overall experiences.

Although for the Blender Cloud this doesn't make much sense (since the
content is in English), Flamenco and Attract can really benefit from
this.

New configuration settings
==========================
There are two new parameters in config.py:

* DEFAULT_LOCALE='en_US'
* SUPPORT_ENGLISH=True

They are both properly documented in the `config.py` file.

Technicall details
==================
We are using the 'Accept-Languages' header to match the
available translations with the user supported languages.

If an extension has a `translations` folder, it's used for translations.
However the main application (e.g., Blender Cloud) is the one that
determines the supported languages based on its `languages` folder.

How to mark strings for translation
===================================
See the documentation in README.md.

But as an example, 404.pug and pillar/__init__.py::handle_sdk_resource_invalid
have marked up strings that will be extracted once you install pillar,
or run any of the translations commangs.

Remember to **gulp** after you update the template files.

How to setup translations
=========================
You will need to create translation for the main project, and for each
extension that you want to see translated. I added a new entry-point to
the installation of Pillar.

So all you need is to use the `translations`
script to initialize, update and compile your translations.

Pending tasks
=============
Aside from marking more strings for extraction and start the translation
effort it would be interesting to replace the pretty_date routine with
momentjs.

Acknowledgement
===============
Many thanks for Sybren Stüvel for the suggestions and throughout code
review. Thanks also to Francesco Siddi for the original documentation
and suggesting me to tackle this. And Kudos for Pablo Vazquez for the
motivational support and for the upcoming "strings mark up" task force!

The core of the implementation is based on Miguel Grinberg i18n chapter
of his great 'The Mega Flask Tutorial'.

Reviewers: sybren

Differential Revision: https://developer.blender.org/D2826
2017-09-09 00:26:18 +02:00
6b3e523036 Remove Flask-OAuthlib and oauth_blender_id from Pillar
We switch completely to a rauth-based approach, allowing multiple providers for authentication.
2017-08-25 10:53:22 +02:00
93d534fe94 Added Organization Manager.
This is a Flamenco/Attract-style Manager object that's instantiated by
the PillarApplication. It can create Organizations and assign/remove
users.

Also I updated the Organization schema to reflect the currently desired
design.

NOTA BENE: this does not include any security/authorisation checks on Eve's
organizations collection.
2017-08-24 14:25:52 +02:00
2b09711eb0 Load user capabilities from Pillar config and allow extensions to extend.
Default caps can be overridden using the USER_CAPABILITIES name in
config_local.py. These can be extended by Pillar Extensions.
2017-08-22 11:31:17 +02:00
7ed053b6c1 Little clarification
... because I always forget this myself...
2017-06-15 14:52:43 +02:00