Skip to content

Commit 1a46828

Browse files
committed
return 404 to anonymous user requesting private project info
1 parent 072e4bb commit 1a46828

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

server/mergin/sync/permissions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,9 @@ def require_project_by_uuid(uuid: str, permission: ProjectPermissions, scheduled
219219
if not scheduled:
220220
project = project.filter(Project.removed_at.is_(None))
221221
project = project.first_or_404()
222+
# we don't want to tell anonymous user if a private project exists
223+
if current_user.is_anonymous and not project.public:
224+
abort(404)
222225
workspace = project.workspace
223226
if not workspace:
224227
abort(404)

server/mergin/tests/test_public_api_v2.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
create_workspace,
1111
create_project,
1212
upload_file_to_project,
13+
login,
14+
file_info,
1315
)
1416

1517
from ..auth.models import User
@@ -47,7 +49,6 @@
4749
_get_changes_with_diff_0_size,
4850
_get_changes_without_added,
4951
)
50-
from .utils import add_user, file_info
5152

5253

5354
def test_schedule_delete_project(client):
@@ -173,8 +174,13 @@ def test_get_project(client):
173174
admin = User.query.filter_by(username=DEFAULT_USER[0]).first()
174175
test_workspace = create_workspace()
175176
project = create_project("new_project", test_workspace, admin)
177+
user = add_user("tests", "tests")
176178
logout(client)
179+
# anonymous user cannot access the resource
180+
response = client.get(f"v2/projects/{project.id}")
181+
assert response.status_code == 404
177182
# lack of permissions
183+
login(client, user.username, "tests")
178184
response = client.get(f"v2/projects/{project.id}")
179185
assert response.status_code == 403
180186
# access public project

0 commit comments

Comments
 (0)