1
0

2 Commits 1c06cf4614 ... e153f7228a

Auteur SHA1 Message Date
  pitchum e153f7228a Bugfix: cron_task fails when last_update_success is null in DB. il y a 6 ans
  pitchum 28d752d4ce Allow switching between manual and isp.json updates. il y a 6 ans

+ 7 - 0
ffdnispdb/templates/project_form_generic.html

@@ -1,6 +1,13 @@
 {% extends "layout.html" %}
 {% extends "layout.html" %}
 {% import "form_macros.html" as fm %}
 {% import "form_macros.html" as fm %}
 {% block container %}
 {% block container %}
+
+{% if isp %}
+<ul class="nav nav-tabs">
+  <li role="presentation" class="active"><a href="#">{{ _("Manual updates") }}</a></li>
+  <li role="presentation"><a href="{{ url_for('.edit_project_auto_update', projectid=isp.id) }}">{{ _("Automatic updates (isp.json)") }}</a></li>
+</ul>
+{% endif %}
 <div class="row">
 <div class="row">
   <div class="span11 well">
   <div class="span11 well">
     <form method="post" class="form-horizontal">
     <form method="post" class="form-horizontal">

+ 8 - 1
ffdnispdb/templates/project_json_form_generic.html

@@ -1,14 +1,21 @@
 {% extends "layout.html" %}
 {% extends "layout.html" %}
 {% import "form_macros.html" as fm %}
 {% import "form_macros.html" as fm %}
 {% block container %}
 {% block container %}
+
+{% if isp %}
+<ul class="nav nav-tabs">
+  <li role="presentation"><a href="{{ url_for('.edit_project', projectid=isp.id) }}">{{ _("Manual updates") }}</a></li>
+  <li role="presentation" class="active"><a href="#">{{ _("Automatic updates (isp.json)") }}</a></li>
+</ul>
+{% endif %}
 <div class="row">
 <div class="row">
   <div class="span11 well">
   <div class="span11 well">
     <form method="post" class="form-horizontal">
     <form method="post" class="form-horizontal">
       {{ form.csrf_token }}
       {{ form.csrf_token }}
       <fieldset>
       <fieldset>
         <legend>{{ page_title }}</legend>
         <legend>{{ page_title }}</legend>
-        {{ fm.render_field(form.json_url) }}
         {{ fm.render_field(form.tech_email) }}
         {{ fm.render_field(form.tech_email) }}
+        {{ fm.render_field(form.json_url) }}
         <div class="form-actions">
         <div class="form-actions">
           <input type="submit" class="btn btn-primary" value="{{ _("Next") }}" />
           <input type="submit" class="btn btn-primary" value="{{ _("Next") }}" />
           <input type="reset" class="btn" value="{{ _("Cancel") }}" />
           <input type="reset" class="btn" value="{{ _("Cancel") }}" />

BIN
ffdnispdb/translations/fr/LC_MESSAGES/messages.mo


+ 10 - 0
ffdnispdb/translations/fr/LC_MESSAGES/messages.po

@@ -382,6 +382,16 @@ msgstr ""
 msgid "That JSON thing is too cool for me"
 msgid "That JSON thing is too cool for me"
 msgstr "Le JSON c'est trop fort pour moi"
 msgstr "Le JSON c'est trop fort pour moi"
 
 
+#: ffdnispdb/templates/project_form_generic.html:7
+#: ffdnispdb/templates/project_json_form_generic.html:7
+msgid "Manual updates"
+msgstr "Mises à jour manuelles"
+
+#: ffdnispdb/templates/project_form_generic.html:8
+#: ffdnispdb/templates/project_json_form_generic.html:8
+msgid "Automatic updates (isp.json)"
+msgstr "Mises à jour automatiques (isp.json)"
+
 #: ffdnispdb/templates/add_project_form.html:1
 #: ffdnispdb/templates/add_project_form.html:1
 msgid "Add a new project"
 msgid "Add a new project"
 msgstr "Ajouter un nouveau projet"
 msgstr "Ajouter un nouveau projet"

+ 2 - 0
ffdnispdb/utils.py

@@ -59,6 +59,8 @@ def tosystemtz(d):
     """
     """
     Convert the UTC datetime ``d`` to the system time zone defined in the settings
     Convert the UTC datetime ``d`` to the system time zone defined in the settings
     """
     """
+    if d is None:
+        return 'None'
     return d.astimezone(pytz.timezone(current_app.config['SYSTEM_TIME_ZONE']))
     return d.astimezone(pytz.timezone(current_app.config['SYSTEM_TIME_ZONE']))
 
 
 
 

+ 50 - 25
ffdnispdb/views.py

@@ -178,32 +178,57 @@ def edit_project(projectid):
     elif (sess_token is None or (datetime.utcnow() - sess_token).total_seconds() > MAX_TOKEN_AGE):
     elif (sess_token is None or (datetime.utcnow() - sess_token).total_seconds() > MAX_TOKEN_AGE):
         return redirect(url_for('.gen_edit_token', projectid=isp.id))
         return redirect(url_for('.gen_edit_token', projectid=isp.id))
 
 
-    if isp.is_local:
-        form = forms.ProjectForm.edit_json(isp)
-        if form.validate_on_submit():
-            isp.name = form.name.data
-            isp.shortname = form.shortname.data or None
-            isp.json = form.to_json(isp.json)
-            isp.tech_email = form.tech_email.data
-
-            db.session.add(isp)
-            db.session.commit()
-            flash(_(u'Project modified'), 'info')
-            return redirect(url_for('.project', projectid=isp.id))
-        return render_template('edit_project_form.html', form=form)
-    else:
-        form = forms.ProjectJSONForm(obj=isp)
-        if form.validate_on_submit():
-            isp.tech_email = form.tech_email.data
-            url = utils.make_ispjson_url(form.json_url.data)
-            isp.json_url = url
-
-            db.session.add(isp)
-            db.session.commit()
-            flash(_(u'Project modified'), 'info')
-            return redirect(url_for('.project', projectid=isp.id))
-        return render_template('edit_project_json_form.html', form=form)
+    form = forms.ProjectForm.edit_json(isp)
+    if form.validate_on_submit():
+        isp.name = form.name.data
+        isp.shortname = form.shortname.data or None
+        isp.json = form.to_json(isp.json)
+        isp.tech_email = form.tech_email.data
+        isp.json_url = None
+
+        db.session.add(isp)
+        db.session.commit()
+        flash(_(u'Project modified'), 'info')
+        return redirect(url_for('.project', projectid=isp.id))
+    return render_template('edit_project_form.html', form=form, isp=isp)
+
 
 
+@ispdb.route('/isp/<projectid>/edit_json_url', methods=['GET', 'POST'])
+def edit_project_auto_update(projectid):
+    MAX_TOKEN_AGE = 3600
+    isp = ISP.query.filter_by(id=projectid, is_disabled=False).first_or_404()
+    sess_token = session.get('edit_tokens', {}).get(isp.id)
+
+    if 'token' in request.args:
+        s = itsdangerous.URLSafeTimedSerializer(current_app.secret_key, salt='edit')
+        try:
+            r = s.loads(request.args['token'], max_age=MAX_TOKEN_AGE,
+                        return_timestamp=True)
+        except:
+            abort(403)
+
+        if r[0] != isp.id:
+            abort(403)
+
+        tokens = session.setdefault('edit_tokens', {})
+        session.modified = True  # ITS A TARP
+        tokens[r[0]] = r[1]
+        # refresh page, without the token in the url
+        return redirect(url_for('.edit_project', projectid=r[0]))
+    elif (sess_token is None or (datetime.utcnow() - sess_token).total_seconds() > MAX_TOKEN_AGE):
+        return redirect(url_for('.gen_edit_token', projectid=isp.id))
+
+    form = forms.ProjectJSONForm(obj=isp)
+    if form.validate_on_submit():
+        isp.tech_email = form.tech_email.data
+        url = utils.make_ispjson_url(form.json_url.data)
+        isp.json_url = url
+
+        db.session.add(isp)
+        db.session.commit()
+        flash(_(u'Project modified'), 'info')
+        return redirect(url_for('.project', projectid=isp.id))
+    return render_template('edit_project_json_form.html', form=form, isp=isp)
 
 
 @ispdb.route('/isp/<projectid>/gen_edit_token', methods=['GET', 'POST'])
 @ispdb.route('/isp/<projectid>/gen_edit_token', methods=['GET', 'POST'])
 def gen_edit_token(projectid):
 def gen_edit_token(projectid):