allgo issueshttps://gitlab.inria.fr/allgo/allgo/-/issues2021-01-25T00:08:12+01:00https://gitlab.inria.fr/allgo/allgo/-/issues/278Update screenshot for documentation2021-01-25T00:08:12+01:00BERJON MatthieuUpdate screenshot for documentationThe current documentation on allgo/doc has screenshots that will need an update once the qualification will be up.The current documentation on allgo/doc has screenshots that will need an update once the qualification will be up.2018Q3https://gitlab.inria.fr/allgo/allgo/-/issues/199Code refactoring on the webapp list2021-01-19T12:31:23+01:00BERJON MatthieuCode refactoring on the webapp listthe part related to the webapp bit in the template should be extracted and put as a partial included in the relevant templates (such as `webapp_list.html` and tag `tag_webapp_list.html`).the part related to the webapp bit in the template should be extracted and put as a partial included in the relevant templates (such as `webapp_list.html` and tag `tag_webapp_list.html`).2018Q3BERJON MatthieuBERJON Matthieuhttps://gitlab.inria.fr/allgo/allgo/-/issues/243Authorized members to create an app2019-07-30T17:06:25+02:00BERJON MatthieuAuthorized members to create an appThe current system has an `inria` group where all authorized users should be added (inria, irisa and other public organisation users). This is not a satisfying system.
An possible alternative would be to store the allowed domains into a...The current system has an `inria` group where all authorized users should be added (inria, irisa and other public organisation users). This is not a satisfying system.
An possible alternative would be to store the allowed domains into a configuration file and check the user email against it to provide him the authorization to create the app.2018Q3BERJON MatthieuBERJON Matthieuhttps://gitlab.inria.fr/allgo/allgo/-/issues/251we should systematically enforce model constraints on .save()2019-04-17T14:58:02+02:00BAIRE Anthonywe should systematically enforce model constraints on .save()Django has a nasty ~~bug~~feature: while we can define many constraints to the models, django does not enforce anything automatically. All validations are to be done manually, and its very easy to miss one of them.
This issue is describ...Django has a nasty ~~bug~~feature: while we can define many constraints to the models, django does not enforce anything automatically. All validations are to be done manually, and its very easy to miss one of them.
This issue is describe in details here:
https://www.xormedia.com/django-model-validation-on-save/
In the implementation of !105, I added the checks at places that are obvious
(03d50ab31af573e714e51d7ef7e97b59094ad492 and 630344529afc61e21e81af5676c507486256ccf1),
but there are many other places that should be checked.
I think we should apply the solution recommended in the page above: we should derive all our models from a common base class that reimplements save() to enforce these checks every time an object is created or updated.
Example:
```py
class BaseModel(models.Model):
def save(self, force_insert=False, force_update=False, **kw):
if not (force_insert or force_update):
self.full_clean()
super().save(force_insert, force_update, **kw)
```2018Q3BAIRE AnthonyBAIRE Anthonyhttps://gitlab.inria.fr/allgo/allgo/-/issues/259add the initial django migration into the git repository2018-12-20T16:02:37+01:00BAIRE Anthonyadd the initial django migration into the git repositoryNotes:
- this has to be done just before making the release.
- we need to patch the initial migration to reserve lower webapp ids to existing apps on allgo.inria.fr ->
```py
migrations.RunSQL("ALTER TABLE dj_webapps AUTO_INCREMENT=10...Notes:
- this has to be done just before making the release.
- we need to patch the initial migration to reserve lower webapp ids to existing apps on allgo.inria.fr ->
```py
migrations.RunSQL("ALTER TABLE dj_webapps AUTO_INCREMENT=1000;")
```
see: https://stackoverflow.com/questions/34279652/set-autoincrement-value-in-django-table
2018Q3https://gitlab.inria.fr/allgo/allgo/-/issues/285fix font-awesome buttons2018-12-17T15:48:31+01:00BAIRE Anthonyfix font-awesome buttons2018Q3BAIRE AnthonyBAIRE Anthonyhttps://gitlab.inria.fr/allgo/allgo/-/issues/279CGU validation2018-12-10T11:45:51+01:00BERJON MatthieuCGU validationBe able to force the CGU validation before a user has the right to register on the platform.Be able to force the CGU validation before a user has the right to register on the platform.2018Q3BERJON MatthieuBERJON Matthieuhttps://gitlab.inria.fr/allgo/allgo/-/issues/273Merge WebappForm with UserWebappForm2018-12-10T11:41:51+01:00BAIRE AnthonyMerge WebappForm with UserWebappFormbecause there is no reason this code should be duplicated
Note: should not be started before !133, !132 and !129 are merged (unless you enjoy conflicts!)because there is no reason this code should be duplicated
Note: should not be started before !133, !132 and !129 are merged (unless you enjoy conflicts!)2018Q3BERJON MatthieuBERJON Matthieuhttps://gitlab.inria.fr/allgo/allgo/-/issues/276request a provider token for gitlab.inria.fr2018-12-06T19:07:46+01:00BAIRE Anthonyrequest a provider token for gitlab.inria.fr2018Q3CAMPION SebastienCAMPION Sebastienhttps://gitlab.inria.fr/allgo/allgo/-/issues/280Error on sandbox page for docker names using multiple words2018-10-22T10:53:09+02:00BERJON MatthieuError on sandbox page for docker names using multiple wordsI found a bug for endpoints of `/apps/(?P<docker_name>[\\w-]+)$/sandbox`. This bug shows up only when docker names are using multiple words such as `my new app` or `hello world`.
Here the error reported
```python
NoReverseMatch at /apps...I found a bug for endpoints of `/apps/(?P<docker_name>[\\w-]+)$/sandbox`. This bug shows up only when docker names are using multiple words such as `my new app` or `hello world`.
Here the error reported
```python
NoReverseMatch at /apps/hello-world/sandbox
Reverse for 'webapp_detail' with arguments '('Hello world',)' not found. 1 pattern(s) tried: ['apps/(?P<docker_name>[\\w-]+)$']
```
And its traceback:
```python
Traceback:
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py" in inner
41. response = get_response(request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response
217. response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py" in _get_response
215. response = response.render()
File "/usr/local/lib/python3.5/dist-packages/django/template/response.py" in render
107. self.content = self.rendered_content
File "/usr/local/lib/python3.5/dist-packages/django/template/response.py" in rendered_content
84. content = template.render(context, self._request)
File "/usr/local/lib/python3.5/dist-packages/django/template/backends/django.py" in render
66. return self.template.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
207. return self._render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in _render
199. return self.nodelist.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/loader_tags.py" in render
177. return compiled_parent._render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in _render
199. return self.nodelist.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/defaulttags.py" in render
322. return nodelist.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/loader_tags.py" in render
72. result = block.nodelist.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render
990. bit = node.render_annotated(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/base.py" in render_annotated
957. return self.render(context)
File "/usr/local/lib/python3.5/dist-packages/django/template/defaulttags.py" in render
458. url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "/usr/local/lib/python3.5/dist-packages/django/urls/base.py" in reverse
91. return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))
File "/usr/local/lib/python3.5/dist-packages/django/urls/resolvers.py" in _reverse_with_prefix
497. raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /apps/hello-world/sandbox
Exception Value: Reverse for 'webapp_detail' with arguments '('Hello world',)' not found. 1 pattern(s) tried: ['apps/(?P<docker_name>[\\w-]+)$']
```2018Q3https://gitlab.inria.fr/allgo/allgo/-/issues/275add helpdesk links2018-10-16T09:40:59+02:00BAIRE Anthonyadd helpdesk linksSupport requests should be made through rt. In production we have two links (because we have two rt submission forms, but which lands into the same queue) it is configurable at runtime in the helpdesk_link config key
```rb
# from rails/...Support requests should be made through rt. In production we have two links (because we have two rt submission forms, but which lands into the same queue) it is configurable at runtime in the helpdesk_link config key
```rb
# from rails/config/application.rb
# Externalised web links inside the help dropdown bar
config.helpdesk_links = {
"report a problem" => "https://helpdesk.inria.fr/categories/227/submit",
"ask a question" => "https://helpdesk.inria.fr/categories/228/submit",
}
```
This should be configurable at runtime, in our deployment we could have:
```py
{
"Helpdesk": "https://helpdesk.inria.fr/categories/227/submit",
"Bug tracker (public)": "https://gitlab.inria.fr/allgo/allgo.inria.fr/issues",
"Contact": "mailto:allgo@inria.fr",
}
```
The "ask a question" (demande pour allgo) form is kind of overlaping with allgo.inria.fr/issues, maybe we can drop it2018Q3BERJON MatthieuBERJON Matthieuhttps://gitlab.inria.fr/allgo/allgo/-/issues/274Document form fields2018-10-16T09:21:00+02:00BAIRE AnthonyDocument form fieldsWe should add a 'help_text' attribute for every form field to explain what is the purpose of the field and we should also display them in the UI (with a mouse-over popup)
depends on #273We should add a 'help_text' attribute for every form field to explain what is the purpose of the field and we should also display them in the UI (with a mouse-over popup)
depends on #2732018Q3BERJON MatthieuBERJON Matthieuhttps://gitlab.inria.fr/allgo/allgo/-/issues/225API errors should be returned in json format2018-10-15T17:47:46+02:00BAIRE AnthonyAPI errors should be returned in json formatWhen an API endpoint fails, the result page is the default page generated by django which is helpless for the user
We should return a brief json-formatted message instead. eg:
```
{"error": "webapp not found"}
{"error": "queue not found...When an API endpoint fails, the result page is the default page generated by django which is helpless for the user
We should return a brief json-formatted message instead. eg:
```
{"error": "webapp not found"}
{"error": "queue not found"}
...
```2018Q3CAMPION SebastienCAMPION Sebastienhttps://gitlab.inria.fr/allgo/allgo/-/issues/247Update user documentation2018-10-15T14:40:58+02:00BERJON MatthieuUpdate user documentationThe documentation need to checked and updated (for example the runner part). This can be done in its [dedicated repository][l1].
[l1]: https://gitlab.inria.fr/allgo/docThe documentation need to checked and updated (for example the runner part). This can be done in its [dedicated repository][l1].
[l1]: https://gitlab.inria.fr/allgo/doc2018Q3CAMPION SebastienCAMPION Sebastienhttps://gitlab.inria.fr/allgo/allgo/-/issues/257test the UI with multiple browsers2018-10-08T14:21:40+02:00BAIRE Anthonytest the UI with multiple browsersat least: firefox, chrome/chromium, safari and edgeat least: firefox, chrome/chromium, safari and edge2018Q3BERJON MatthieuBERJON Matthieuhttps://gitlab.inria.fr/allgo/allgo/-/issues/126email address not validated when the user changes it2018-09-28T10:57:39+02:00BAIRE Anthonyemail address not validated when the user changes itWhen a user updates his email address, django does not send a confirmation email to ensure that the user effectively controls this address.
This allows any user to forge a inria/irisa address to create a webapp.When a user updates his email address, django does not send a confirmation email to ensure that the user effectively controls this address.
This allows any user to forge a inria/irisa address to create a webapp.2018Q3BERJON MatthieuBERJON Matthieuhttps://gitlab.inria.fr/allgo/allgo/-/issues/250implement access control in job views2018-09-27T14:56:12+02:00BAIRE Anthonyimplement access control in job viewsa job should be viewable only by its ownera job should be viewable only by its owner2018Q3BERJON MatthieuBERJON Matthieuhttps://gitlab.inria.fr/allgo/allgo/-/issues/253feature: import projects from the previous allgo instance2018-09-27T09:39:53+02:00BAIRE Anthonyfeature: import projects from the previous allgo instancetwo possible strategies (undecided):
- quick and dirty one-shot script run by sysadmin and imports all existing projects (note: this requires having pre-existing user accounts on the destination server)
- on-demand import by the user (im...two possible strategies (undecided):
- quick and dirty one-shot script run by sysadmin and imports all existing projects (note: this requires having pre-existing user accounts on the destination server)
- on-demand import by the user (import feature integrated within django)2018Q3CAMPION SebastienCAMPION Sebastienhttps://gitlab.inria.fr/allgo/allgo/-/issues/263implement webapp memory limit in django2018-09-20T11:19:56+02:00BAIRE Anthonyimplement webapp memory limit in djangothis is what we have in production:
- Webapp.memory_limit contains the size (in bytes) of the memory allocated to run a job wit this webapp (should not be null)
- at webapp creation the webapp's memory_limit is set to the default limit c...this is what we have in production:
- Webapp.memory_limit contains the size (in bytes) of the memory allocated to run a job wit this webapp (should not be null)
- at webapp creation the webapp's memory_limit is set to the default limit configured in allgo (in production it is 4GB)
- allgo admins may change this memory_limit (on a per-app basis) upon user requests2018Q3BAIRE AnthonyBAIRE Anthonyhttps://gitlab.inria.fr/allgo/allgo/-/issues/249ensure important urls are not broken2018-09-20T11:06:09+02:00BAIRE Anthonyensure important urls are not brokenResearch papers published by our users may reference their app hosted on allgo. We must ensure that important urls are not broken.
Especially in the django app the webapp url is `/app/DOCKER_NAME/` whereas the rails app accepts:
* `/ap...Research papers published by our users may reference their app hosted on allgo. We must ensure that important urls are not broken.
Especially in the django app the webapp url is `/app/DOCKER_NAME/` whereas the rails app accepts:
* `/app/DOCKER_NAME`
* `/app/DOCKER_NAME/`
* `/webapps/ID`
* `/webapps/ID/`
and the internal links use either `/app/DOCKER_NAME` or `/webapps/ID`.
Unfortunately it does not perform any redirect, therefore the displayed webapp url (that users copied and pasted into their paper) may be either `/app/DOCKER_NAME` or `/webapps/ID` (depending on the link they used to land on this page).
**update 2018/09/05**
* need to protect tag urls: `/tags/TAG_NAME`
* should perform an analysis of nginx logs to ensure we did not miss any other important url
2018Q3CAMPION SebastienCAMPION Sebastien