home · contact · privacy
Add config option to (dis-)allow file data editing. master
authorChristian Heller <c.heller@plomlompom.de>
Wed, 11 Dec 2024 02:17:44 +0000 (03:17 +0100)
committerChristian Heller <c.heller@plomlompom.de>
Wed, 11 Dec 2024 02:17:44 +0000 (03:17 +0100)
src/templates/file_data.tmpl
src/ytplom/http.py
src/ytplom/misc.py

index 7e54370fd0fd1b77b8cef8c2d70a1f983ae12aff..82dc50d1d925f1afca710a3c500f5a85c0b9653e 100644 (file)
@@ -9,31 +9,38 @@ td.tag_checkboxes { width: 1em; }
 
 
 {% block body %}
+{% if allow_edit %}
 <form action="/{{page_names.file}}/{{file.digest.b64}}" method="POST" />
 <input type="hidden" name="redir_target" value="{{redir_target}}" />
+{% endif %}
 <table>
+
 <tr>
 <th>path:</th>
 <td class="top_field">{{file.rel_path}}</td>
 </tr>
+
 <tr>
 <th>present:</th>
 <td>{% if file.present %}<a href="/{{page_names.download}}/{{file.yt_id}}">yes</a>{% else %}no{% endif %}</td>
 </tr>
+
 <tr>
 <th>YouTube&nbsp;ID:</th>
 <td><a href="/{{page_names.yt_result}}/{{file.yt_id}}">{{file.yt_id}}</a>
 </tr>
+
 <tr>
 <th>tags</th>
 <td>
 <table>
 {% for tag in file.tags %}
 <tr>
-<td class="tag_checkboxes"><input type="checkbox" name="tags" value="{{tag}}" checked /></td>
+<td class="tag_checkboxes"><input type="checkbox" name="tags" value="{{tag}}" checked{% if not allow_edit %} disabled{% endif %}/></td>
 <td>{{tag}}</td>
 </tr>
 {% endfor %}
+{% if allow_edit %}
 <tr>
 <td class="tag_checkboxes">add:</td>
 <td>
@@ -45,15 +52,23 @@ td.tag_checkboxes { width: 1em; }
 </datalist>
 </td>
 </tr>
+{% endif %}
+</table>
+</td>
+</tr>
+
 <tr>
 <th>flags:</th>
 <td class="flags">
 {% for flag_name in flag_names %}
-{{ flag_name }}: <input type="checkbox" name="flags" value="{{flag_name}}" {% if file.is_flag_set(flag_name) %}checked {% endif %} /><br />
+{{ flag_name }}: <input type="checkbox" name="flags" value="{{flag_name}}" {% if file.is_flag_set(flag_name) %}checked{% endif %}{% if not allow_edit %} disabled{% endif %}/><br />
 {% endfor %}
 </td>
 </tr>
+
 </table>
+{% if allow_edit %}
 <input type="submit" />
 </form>
+{% endif %}
 {% endblock %}
index b845c7612542ffc0bfcd28c9d83b74d4c3e970be..97f4adae30e59ca953df98d91895abc7a855957c 100644 (file)
@@ -174,6 +174,9 @@ class _TaskHandler(BaseHTTPRequestHandler):
         self._redirect(Path(postvars.first_for('redir_target')))
 
     def _receive_file_data(self, digest: Hash, postvars: _ReqMap) -> None:
+        if not self.server.config.allow_file_edit:
+            self._send_http('no way', code=403)
+            return
         with DbConn() as conn:
             file = VideoFile.get_one(conn, digest)
             file.set_flags({FILE_FLAGS[FlagName(name)]
@@ -314,6 +317,7 @@ class _TaskHandler(BaseHTTPRequestHandler):
         self._send_rendered_template(
                 _NAME_TEMPLATE_FILE_DATA,
                 {'file': file,
+                 'allow_edit': self.server.config.allow_file_edit,
                  'flag_names': list(FILE_FLAGS),
                  'unused_tags': unused_tags})
 
index e052e49193dc79cce4427dc1d94b2b3190a3a9b8..f07986acb9fe5b297a16a6477c2eee9a643ea7d0 100644 (file)
@@ -29,7 +29,8 @@ DEFAULTS = {
     'port_remote': 8090,
     'background_color': '#ffffff',
     'queries_cutoff': '',
-    'tags_prefilter_str': ''
+    'tags_prefilter_str': '',
+    'allow_file_edit': True
 }
 
 # type definitions for mypy
@@ -92,6 +93,7 @@ class Config:
     background_color: str
     queries_cutoff: str
     tags_prefilter_str: str
+    allow_file_edit: bool
 
     def __init__(self):
         def set_attrs_from_dict(d):