Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 2024.6.7 #318

Merged
merged 8 commits into from
Nov 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions .prod.env
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,6 @@ LOCAL_PROJECTS=/data
#MAINTENANCE_FILE=os.path.join(LOCAL_PROJECTS, 'MAINTENANCE') # locking file when backups are created
MAINTENANCE_FILE=/data/MAINTENANCE

#PROXY_FIX=True

#PUBLIC_DIR=os.path.join(config_dir, os.pardir, 'build', 'static')

#SECRET_KEY=NODEFAULT
SECRET_KEY=fixme

Expand Down Expand Up @@ -110,7 +106,11 @@ MAIL_USERNAME=fixme
#MAX_DOWNLOAD_ARCHIVE_SIZE=1024 * 1024 * 1024 # max total files size for archive download

#USE_X_ACCEL=False # use nginx (in front of gunicorn) to serve files (https://www.nginx.com/resources/wiki/start/topics/examples/x-accel/)
USE_X_ACCEL=1

# where geodiff lib copies working files
#GEODIFF_WORKING_DIR=$LOCAL_PROJECTS/geodiff_tmp
GEODIFF_WORKING_DIR=/data/geodiff

# celery

Expand All @@ -133,6 +133,8 @@ CELERYD_CONCURRENCY=2

#CELERYD_PREFETCH_MULTIPLIER=4

#CELERY_ROUTES={} # split tasks into separate queues

# various life times

#CLOSED_ACCOUNT_EXPIRATION=5 # time in days after user closed his account to all projects and files are permanently deleted
Expand Down Expand Up @@ -167,6 +169,11 @@ GLOBAL_STORAGE=10737418240

# GLOBAL_ADMIN False

# Gunicorn server socket
# toggle registration form to create new users
#USER_SELF_REGISTRATION=False

# what type of server is running, e.g. community edition or enterprise edition
#SERVER_TYPE=ce

# Gunicorn server socket
PORT=5000
2 changes: 2 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,8 @@ services:
image: nginxinc/nginx-unprivileged:1.25.5
container_name: merginmaps-proxy
restart: always
# run nginx as built-in user but with group mergin-family for files permissions
user: 101:999
ports:
- "8080:8080"
volumes:
Expand Down
2 changes: 1 addition & 1 deletion nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,6 @@ server {

location /download/ {
internal;
alias /data; # we need to mount data from mergin server here
alias /data/; # we need to mount data from mergin server here
}
}
24 changes: 10 additions & 14 deletions server/mergin/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,15 @@


class Configuration(object):
# flask/connexion variables
DEBUG = config("FLASK_DEBUG", default=False, cast=bool)
TESTING = config("TESTING", default=False, cast=bool)
SECRET_KEY = config("SECRET_KEY")
PROXY_FIX = config("PROXY_FIX", default=True, cast=bool)
SWAGGER_UI = config(
"SWAGGER_UI", default=False, cast=bool
) # to enable swagger UI console (for tests only)
VERSION = config("VERSION", default=get_version())
PUBLIC_DIR = config(
"PUBLIC_DIR", default=os.path.join(config_dir, os.pardir, "build", "static")
)
# to enable swagger UI console (for tests only)
SWAGGER_UI = config("SWAGGER_UI", default=False, cast=bool)
# expiration time in seconds
WTF_CSRF_TIME_LIMIT = config("WTF_CSRF_TIME_LIMIT", default=3600 * 24, cast=int)
WTF_CSRF_ENABLED = config("WTF_CSRF_ENABLED", default=True, cast=bool)

# Mergin DB related
SQLALCHEMY_TRACK_MODIFICATIONS = config(
Expand All @@ -43,11 +41,6 @@ class Configuration(object):
f"postgresql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_DATABASE}?application_name={DB_APPLICATION_NAME}",
)

WTF_CSRF_TIME_LIMIT = config(
"WTF_CSRF_TIME_LIMIT", default=3600 * 24, cast=int
) # in seconds
WTF_CSRF_ENABLED = config("WTF_CSRF_ENABLED", default=True, cast=bool)

# for flask mail
MAIL_SERVER = config("MAIL_SERVER", default="localhost")
MAIL_PORT = config("MAIL_PORT", default=587, cast=int)
Expand Down Expand Up @@ -97,8 +90,11 @@ class Configuration(object):
GLOBAL_WRITE = config("GLOBAL_WRITE", default=False, cast=bool)
GLOBAL_ADMIN = config("GLOBAL_ADMIN", default=False, cast=bool)

SERVER_TYPE = config("SERVER_TYPE", default="")
# can users create their own account or is it reserved for superuser only
USER_SELF_REGISTRATION = config("USER_SELF_REGISTRATION", default=False, cast=bool)

# build hash number
BUILD_HASH = config("BUILD_HASH", default="")
# backend version
VERSION = config("VERSION", default=get_version())
SERVER_TYPE = config("SERVER_TYPE", default="ce")
8 changes: 4 additions & 4 deletions server/mergin/sync/commands.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,13 +75,13 @@ def download(project_name, version, directory): # pylint: disable=W0612
os.mkdir(directory)
files = pv.files
for f in files:
project.storage.restore_versioned_file(f["path"], version)
f_dir = os.path.dirname(f["path"])
project.storage.restore_versioned_file(f.path, version)
f_dir = os.path.dirname(f.path)
if f_dir:
os.makedirs(os.path.join(directory, f_dir), exist_ok=True)
shutil.copy(
os.path.join(project.storage.project_dir, f["location"]),
os.path.join(directory, f["path"]),
os.path.join(project.storage.project_dir, f.location),
os.path.join(directory, f.path),
)
print("Project downloaded successfully")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-MerginMaps-Commercial
}"
>
<template v-if="showNamespace"
>{{ slotProps.data.namespace }} /</template
>{{ slotProps.data.namespace }} / </template
>{{ slotProps.data.name }}</router-link
><PTag
v-if="slotProps.data.access.public && !onlyPublic"
Expand Down Expand Up @@ -187,7 +187,7 @@ export default defineComponent({
columns = columns.concat(
{ header: 'Project name', field: 'name' },
{ header: 'Versions', field: 'version' },
{ header: 'Size', field: 'meta.size' },
{ header: 'Size', field: 'meta.size' }
// {
// header: 'Collaborators',
// field: 'access.readers'
Expand Down
9 changes: 9 additions & 0 deletions web-app/packages/lib/src/modules/project/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ export const useProjectStore = defineStore('projectModule', {
},

setProject(payload: { project: ProjectDetail }) {
const userStore = useUserStore()
let enhancedProject: EnhancedProjectDetail = null
if (payload.project) {
enhancedProject = {
Expand All @@ -147,6 +148,14 @@ export const useProjectStore = defineStore('projectModule', {
}
}
this.project = enhancedProject

// Update workspace
if (enhancedProject) {
userStore.setWorkspace({
workspaceId: enhancedProject?.workspace_id,
skipStorage: false
})
}
},
setProjects(payload: ProjectsPayload) {
this.projects = payload.projects
Expand Down
2 changes: 1 addition & 1 deletion web-app/packages/lib/src/modules/user/store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ export const useUserStore = defineStore('userModule', {
this.workspaces = payload.workspaces
},

setWorkspaceId(payload) {
setWorkspaceId(payload: { id: number }) {
this.workspaceId = payload.id
},

Expand Down
Loading