Configuring the Editor service

Editor is a component of .

It is an application built with Spring Boot.

The Editor configuration consists of two files:

  • application.yaml - general system settings
  • application-seatmap.yaml - application-specific settings

Runtime and upgrades from 1.74

The editor frontend image runs Node and serves the editor core next to the static files. Use the image entrypoint in custom installations and /healthz for frontend readiness and liveness. The core service answers at /core on the frontend web port (PORT, default 8081) and requires a valid editor token from every caller. Editor-service signs each of its calls with a short-lived token from its private key and reaches the core at seatmap.services.core.url. The default, http://127.0.0.1:8081/, is the frontend container of the same Helm pod; when they run outside one pod, for example as separate Docker Compose services, set it to the frontend’s address, and on different hosts keep their clocks synchronized. Keep the metrics listener (CORE_METRICS_PORT, default 9091) internal. Static file hosting alone does not supply the core service.

Keep the configured RSA signing keys consistent between backend and frontend. The Helm chart uses the existing <release>-rsa Secret with private-key and public-key entries and mounts the frontend public key read-only at /keys/public-key. Custom frontend installations mount the matching public key there, or point CORE_PUBLIC_KEY_FILE at it. Without it, the frontend logs an error at startup and /core refuses every call; a file that does not hold a readable public key stops the frontend at startup.

From 1.75.0, editor-service validates the configured RSA pair at startup and logs the public-key SHA-256 fingerprint. Supply both settings below and give the frontend the matching public key. Helm and the Docker Compose bundle already supply the pair. Replacing it signs every user out once. External keys of at least 2048 bits are required from 1.76.0.

Helm value Default Purpose
editor.frontend.coreWorkers 1 Number of core workers. Increase frontend CPU and memory when raising it.
editor.frontend.jobTimeoutMs 20000 Core job deadline in milliseconds.
editor.frontend.drainTimeoutMs 15000 Shutdown drain deadline in milliseconds.
editor.terminationGracePeriodSeconds 30 Pod termination grace in seconds.

These values accept positive whole numbers up to 2147483647. Omitted or null values use the defaults. The termination grace must exceed the drain deadline by at least five seconds. The chart derives the backend core read timeout from the job deadline plus five seconds, rounded down to whole seconds. Frontend resource limits use global.resources.frontend.

Outside Helm, set CORE_WORKERS, CORE_JOB_TIMEOUT_MS, and CORE_DRAIN_TIMEOUT_MS, and align the backend core read timeout. With no CORE_WORKERS, the runtime can choose the worker count automatically; Helm fixes the default to one.

On Docker Compose, the two editor containers run as ordinary services. Set editor-service’s SEATMAP_SERVICES_CORE_URL to the frontend service on the Compose network, such as http://editor-client:8081/. Mount the matching public key at /keys/public-key in the frontend container, and give both editor containers a stop grace period of 30 seconds, because the Compose default of 10 seconds is shorter than the 15-second drain deadline. The Docker Compose bundle for 1.74 sets this up, generates a signing key pair for each installation, and includes an upgrade guide for existing Compose installations.

For a 1.74 upgrade, move editor-service and the editor frontend to 1.74 together; editor-service applies migrations V121–V127 before the new booking-service starts. Upgrade booking-service as soon as the migrations complete, because the earlier version cannot read events once V121 has run. Review duplicate confirmed references per event before V122. Check the release deployment guide for the migration preflight, service order, and layout compatibility limits.

application.yaml

Delay settings

Delay before starting the jobs after the system is started.

Parameter Environment variable Description Default value
initial INITIAL_DELAY Delay in milliseconds 5000 (five seconds)

Java Spring framework properties

Parameter Environment variable Description Default value
spring.profiles.include SPRING_PROFILES_INCLUDE Whether to add the properties from another profile seatmap
spring.jpa.generate-ddl SPRING_JPA_GENERATE_DDL Whether to enable DDL generation true
spring.jpa.properties.hibernate.jdbc.batch_size SPRING_JPA_PROPERTIES_HIBERNATE_JDBC_BATCH_SIZE Number of INSERT, UPDATE, and DELETE statements to be set in a single database call 50
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults SPRING_JPA_PROPERTIES_HIBERNATE_TEMP_USE_JDBC_METADATA_DEFAULTS Whether to consult the JDBC metadata to determine certain settings default values when the database may not be available false
spring.jpa.properties.hibernate.order_inserts SPRING_JPA_PROPERTIES_HIBERNATE_ORDER_INSERTS Whether to order SQL inserts by the primary key value of the items being inserted false
spring.jpa.properties.javax.persistence.schema-generation.create-source SPRING_JPA_PROPERTIES_JAVAX_PERSISTENCE_SCHEMA_GENERATION_CREATE_SOURCE Whether to generate the schema DDL commands metadata
spring.jpa.properties.javax.persistence.schema-generation.scripts.action SPRING_JPA_PROPERTIES_JAVAX_PERSISTENCE_SCHEMA_GENERATION_SCRIPTS_ACTION Whether to create or update the database schema update
spring.jpa.properties.javax.persistence.schema-generation.scripts.create-target SPRING_JPA_PROPERTIES_JAVAX_PERSISTENCE_SCHEMA_GENERATION_SCRIPTS_CREATE_TARGET File name for script generation ddl_jpa_creation.sql
spring.jpa.hibernate.ddl-auto SPRING_JPA_HIBERNATE_DDL_AUTO How to initialize the database update
spring.jpa.hibernate.use-new-id-generator-mappings SPRING_JPA_HIBERNATE_USE_NEW_ID_GENERATOR_MAPPINGS Whether to generate identifier values based on an sequence-style database structure true
spring.jpa.database-platform SPRING_JPA_DATABASE_PLATFORM Used database org.hibernate.dialect.PostgreSQLDialect
spring.jpa.open-in-view SPRING_JPA_OPEN_IN_VIEW Whether to enable OSIV false
spring.jackson.mapper.DEFAULT_VIEW_INCLUSION SPRING_JACKSON_MAPPER_DEFAULT_VIEW_INCLUSION Whether to include non-annotated properties in all views true
spring.flyway.baseline-on-migrate SPRING_FLYWAY_BASELINE_ON_MIGRATE Whether to automatically call baseline when migrate is executed against a non-empty schema with no schema history table ’true'
spring.flyway.user SPRING_FLYWAY_USER User that applies the database migrations at startup Same as spring.datasource.username
spring.flyway.password SPRING_FLYWAY_PASSWORD Password of the migration user Same as spring.datasource.password
spring.flyway.placeholders.approles SPRING_FLYWAY_PLACEHOLDERS_APPROLES Comma-separated roles the services connect as, if not the migration user. Each start grants them table access (empty)
spring.datasource.hikari.data-source-properties.reWriteBatchedInserts SPRING_DATASOURCE_HIKARI_DATA_SOURCE_PROPERTIES_REWRITEBATCHEDINSERTS Whether to rewrite regular insert statements into multi-value ones for batched inserts true
spring.datasource.hikari.maximum-pool-size SPRING_DATASOURCE_HIKARI_MAXIMUM_POOL_SIZE Maximum pool size 20
spring.datasource.hikari.connection-timeout SPRING_DATASOURCE_HIKARI_CONNECTION_TIMEOUT Connection timeout 60000
spring.datasource.driver-class-name SPRING_DATASOURCE_DRIVER_CLASS_NAME JDBC driver for communicating with the database org.postgresql.Driver
spring.datasource.password SPRING_DATASOURCE_PASSWORD Password for connecting to the database ${DB_PASSWORD:postgres}
spring.datasource.username SPRING_DATASOURCE_USERNAME Username for connecting to the database ${DB_USERNAME:seatmap}
spring.datasource.url SPRING_DATASOURCE_URL Database location ${DB_URL:jdbc:postgresql://localhost:15432/seatmap}
spring.servlet.multipart.enabled SPRING_SERVLET_MULTIPART_ENABLED Whether to enable support of multipart uploads true
spring.servlet.multipart.max-file-size SPRING_SERVLET_MULTIPART_MAX_FILE_SIZE Maximum size permitted for uploaded files 200MB
spring.servlet.multipart.max-request-size SPRING_SERVLET_MULTIPART_MAX_REQUEST_SIZE Maximum size allowed for multipart/form-data requests 215MB
spring.servlet.multipart.file-size-threshold SPRING_SERVLET_MULTIPART_FILE_SIZE_THRESHOLD Size threshold after which files will be written to disk 2KB
spring.mvc.pathmatch.matching-strategy SPRING_MVC_PATHMATCH_MATCHING_STRATEGY Implementation strategy for matching request paths to Controller handlers ant_path_matcher
spring.data.redis.port SPRING_DATA_REDIS_PORT Redis server port 16379
spring.data.redis.host SPRING_DATA_REDIS_HOST Redis server host localhost

Separate migration and application roles

Editor-service applies the database migrations at startup as the user in SPRING_FLYWAY_USER with SPRING_FLYWAY_PASSWORD, or as the datasource user when these are not set. When editor-service or booking-service connects as another, restricted role, set SPRING_FLYWAY_PLACEHOLDERS_APPROLES on editor-service to that role. When the services use different roles, list them separated by commas, such as editor_app,booking_app.

On every start, editor-service grants each listed role SELECT, INSERT, UPDATE, and DELETE on the tables and views in the schema, and USAGE, SELECT, and UPDATE on its sequences, but no access to the Flyway schema history table. Default privileges give the same access to tables and sequences that later migrations create. Each listed role must exist; otherwise editor-service stops at startup with an error that names the missing role.

Set the variable before upgrading, so that the first start also grants access to the tables of earlier releases. Leave it empty when every service connects as the migration user. Helm and Docker Compose installations connect this way and need no change.

Logging settings

Logging settings to apply to the classes in the pro.seatmap package.

Parameter Environment variable Description Default value
logging.level.pro.seatmap LOGGING_LEVEL_PRO_SEATMAP Logging level DEBUG

Server settings

Parameter Environment variable Description Default value
server.compression.min-response-size SERVER_COMPRESSION_MIN_RESPONSE_SIZE Minimum size of files to compress 1024
server.compression.enabled SERVER_COMPRESSION_ENABLED Whether to compress data true
server.compression.mime-types SERVER_COMPRESSION_MIME_TYPES Mime types to compress text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json
server.servlet.session.timeout SERVER_SERVLET_SESSION_TIMEOUT Servlet session lifetime 2d
server.tomcat.max-http-form-post-size SERVER_TOMCAT_MAX_HTTP_FORM_POST_SIZE Maximum size of a POST request 20MB

Notification settings

Path for Image Ready notifications.

Parameter Environment variable Description Default value
notify.path NOTIFY_PATH Notification path /topic/venues/

application-seatmap.yaml

In the application-seatmap.yaml file, you can configure the parameters described below.

Security settings

The security block allows you to set the lifetime for the refresh and access tokens as well as to manage the keys.

Parameter Environment variable Description Default value
seatmap.security.token.refresh.expire-duration SEATMAP_SECURITY_TOKEN_REFRESH_EXPIRE_DURATION Refresh token lifetime. Format: PTnHnMnS, where n is the relevant hours, minutes or seconds PT2H (two hours)
seatmap.security.token.access.expire-length SEATMAP_SECURITY_TOKEN_ACCESS_EXPIRE_LENGTH Access token lifetime in milliseconds 300000 (five minutes)
seatmap.security.rsa.private-key SEATMAP_SECURITY_RSA_PRIVATE_KEY Required deployment-specific PKCS#8 RSA private-key PEM, inline or file: path; at least 2048 bits Deployment-specific resource
seatmap.security.rsa.public-key SEATMAP_SECURITY_RSA_PUBLIC_KEY Required deployment-specific SPKI RSA public-key PEM, inline or file: path; at least 2048 bits Deployment-specific resource
seatmap.security.sso.user-default-password SEATMAP_SECURITY_SSO_USER_DEFAULT_PASSWORD Default user password PASSWORD

Google API key

An API key is a unique identifier that authenticates requests associated with your project for usage and billing purposes.

Parameter Environment variable Description Default value
google.api.key GOOGLE_API_KEY API key value KEY_VALUE

First run settings

These settings will apply when you run the system for the first time.

Parameter Environment variable Description Default value
seatmap.first-run.organization SEATMAP_FIRST_RUN_ORGANIZATION Name of the first organization created seatmap.pro
seatmap.first-run.email SEATMAP_FIRST_RUN_EMAIL Super admin’s email admin@seatmap.pro
seatmap.first-run.password SEATMAP_FIRST_RUN_PASSWORD Super admin’s password PASSWORD

Password reset settings

Parameter Environment variable Description Default value
seatmap.reset.fromMail SEATMAP_RESET_FROMMAIL Email address from which to send a message to the user with a password reset link Not set
seatmap.reset.token.expire-duration SEATMAP_RESET_TOKEN_EXPIRE_DURATION Link lifetime. Format: PTnHnMnS, where n is the relevant hours, minutes or seconds PT30M (thirty minutes)

Service settings

The URLs at which the services are located.

Parameter Environment variable Description Default value
seatmap.services.booking.url SEATMAP_SERVICES_BOOKING_URL Address of the booking service https://booking.seatmap.pro/
seatmap.services.metrics.url SEATMAP_SERVICES_METRICS_URL Address of the service to send service metrics to https://stat.seatmap.pro/editor-metrics
seatmap.services.editor.url SEATMAP_SERVICES_EDITOR_URL Address of the editor service http://localhost:3000/
seatmap.services.core.url SEATMAP_SERVICES_CORE_URL Address of the editor core on the frontend runtime. Editor-service signs each call with its private key http://127.0.0.1:8081/
seatmap.services.preview.url SEATMAP_SERVICES_PREVIEW_URL Address for the preview service http://localhost:5000/
seatmap.services.preview.api-key SEATMAP_SERVICES_PREVIEW_API_KEY Shared secret sent to the converter as a bearer token. The Helm chart generates and wires it (empty)
seatmap.services.preview.jobs SEATMAP_SERVICES_PREVIEW_JOBS Path under the converter URL polled for a queued conversion jobs/
seatmap.services.preview.await-timeout SEATMAP_SERVICES_PREVIEW_AWAIT_TIMEOUT How long to wait for a queued conversion before reporting it failed PT5M
seatmap.services.preview.poll-interval SEATMAP_SERVICES_PREVIEW_POLL_INTERVAL Interval between conversion status polls PT2S

Mail settings

Email service parameters for restoring passwords. Set the username and password of your mail server, or leave both empty when the server accepts mail without signing in. The strategy takes SMTPS for implicit TLS, SMTP_TLS for STARTTLS, or SMTP, which sends unencrypted when the server does not offer STARTTLS, so use it only on a trusted network. Left unset, the strategy is SMTPS on port 465 and SMTP_TLS on any other port.

When the host or the sender address (seatmap.reset.fromMail) is empty, or the password is set without a username, the editor logs a warning at startup, and a password reset request answers HTTP 503 without sending email. The password reset page then asks the user to contact their administrator.

Parameter Environment variable Description Default value
seatmap.mail.username SEATMAP_MAIL_USERNAME Username Not set
seatmap.mail.password SEATMAP_MAIL_PASSWORD Password Not set
seatmap.mail.host SEATMAP_MAIL_HOST Host Not set
seatmap.mail.port SEATMAP_MAIL_PORT Port 587
seatmap.mail.strategy SEATMAP_MAIL_STRATEGY Connection security Chosen by port

Type a feature, setting, endpoint or SDK method.