Skip to content

Commit 58e1a2d

Browse files
Add permissions test for server check command #408 (#409)
* Add permissions test for server check command #408 * update CLA signed list * reformat to black * Address PR remarks/changes requested * black reformat not enabled * Have permissions test at CLI level * have projects folder from env * Check first LOCAL_PROJECTS env var * Add server commands configs on app initialization * Remove duplicate cmd registration --------- Co-authored-by: Martin Varga <martin.varga@lutraconsulting.co.uk>
1 parent 542b2e6 commit 58e1a2d

3 files changed

Lines changed: 22 additions & 3 deletions

File tree

LICENSES/CLA-signed-list.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,4 @@ C/ My company has custom contribution contract with Lutra Consulting Ltd. or I a
1919
* lavor, 26th April 2023
2020
* luxusko, 25th August 2023
2121
* jozef-budac, 30th January 2024
22+
* fernandinand, 13th March 2025

server/mergin/app.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929

3030
from .sync.utils import get_blacklisted_dirs, get_blacklisted_files
3131
from .config import Configuration
32-
from .commands import add_commands
32+
from .commands import add_commands as server_commands
3333

3434
convention = {
3535
"ix": "ix_%(column_0_label)s",
@@ -139,8 +139,6 @@ def create_simple_app() -> Flask:
139139
if Configuration.GEVENT_WORKER:
140140
flask_app.wsgi_app = GeventTimeoutMiddleware(flask_app.wsgi_app)
141141

142-
add_commands(flask_app)
143-
144142
return flask_app
145143

146144

@@ -189,6 +187,7 @@ def create_app(public_keys: List[str] = None) -> Flask:
189187
login_manager.init_app(app.app)
190188
# register auth blueprint
191189
register_auth(app.app)
190+
server_commands(app.app)
192191

193192
# adjust login manager
194193
@login_manager.user_loader

server/mergin/commands.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from flask import Flask
33
import random
44
import string
5+
import os
56
from datetime import datetime, timezone
67

78

@@ -82,6 +83,16 @@ def _send_email(email: str):
8283
f"Error sending email: {e}",
8384
)
8485

86+
def _check_permissions(path):
87+
"""Check for write permission on working folders"""
88+
89+
if not os.access(path, os.W_OK):
90+
_echo_error(
91+
f"Permissions for {path} folder not set correctly. Please review these settings.",
92+
)
93+
else:
94+
click.secho(f"Permissions granted for {path} folder", fg="green")
95+
8596
def _check_server(): # pylint: disable=W0612
8697
"""Check server configuration."""
8798

@@ -117,6 +128,8 @@ def _check_server(): # pylint: disable=W0612
117128
else:
118129
click.secho("Database initialized properly", fg="green")
119130

131+
_check_permissions(app.config.get("LOCAL_PROJECTS"))
132+
120133
_check_celery()
121134

122135
def _init_db():
@@ -209,3 +222,9 @@ def send_check_email(email: str): # pylint: disable=W0612
209222
def check():
210223
"""Check server configuration."""
211224
_check_server()
225+
226+
@server.command()
227+
@click.option("--path", required=False, default=app.config.get("LOCAL_PROJECTS"))
228+
def permissions(path: str):
229+
"""Check for specific path write permission"""
230+
_check_permissions(path)

0 commit comments

Comments
 (0)