{"id":19763511,"url":"https://github.com/netgrif/etask-backend-starter","last_synced_at":"2026-02-08T21:05:13.783Z","repository":{"id":214073566,"uuid":"735318307","full_name":"netgrif/etask-backend-starter","owner":"netgrif","description":"NAE based process application to help you start creating you own digital environment.","archived":false,"fork":false,"pushed_at":"2025-02-10T13:51:39.000Z","size":160,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-10T14:48:21.525Z","etag":null,"topics":["business-processes","java","nae","petri-nets","petriflow","spring-boot"],"latest_commit_sha":null,"homepage":"https://etask.netgrif.cloud","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/netgrif.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-24T13:27:12.000Z","updated_at":"2024-03-10T23:52:21.000Z","dependencies_parsed_at":"2023-12-25T17:50:44.007Z","dependency_job_id":"84c0b2c4-70d8-4d7c-a248-3b34350958f9","html_url":"https://github.com/netgrif/etask-backend-starter","commit_stats":null,"previous_names":["netgrif/etask-backend-starter"],"tags_count":1,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgrif%2Fetask-backend-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgrif%2Fetask-backend-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgrif%2Fetask-backend-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netgrif%2Fetask-backend-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netgrif","download_url":"https://codeload.github.com/netgrif/etask-backend-starter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243738985,"owners_count":20340002,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["business-processes","java","nae","petri-nets","petriflow","spring-boot"],"created_at":"2024-11-12T04:09:32.061Z","updated_at":"2026-02-08T21:05:13.683Z","avatar_url":"https://github.com/netgrif.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# eTask Backend Starter\n\n[![License](https://img.shields.io/badge/license-NETGRIF%20Community%20License-green)](https://netgrif.com/license)\n[![Java](https://img.shields.io/badge/Java-11-red)](https://openjdk.java.net/projects/jdk/11/)\n[![NAE 6.3.1](https://img.shields.io/badge/NAE-6.3.1-0aa8ff)](https://github.com/netgrif/application-engine)\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/netgrif/etask-backend-starter?sort=semver\u0026display_name=tag)](https://github.com/netgrif/etask-backend-starter/releases)\n\neTask is a process-based application build\nwith [Netgrif Application Engine (NAE)](https://github.com/netgrif/application-engine).\neTask project is a quick way to start working with NAE and [Petriflow](https://github.com/netgrif/petriflow) processes\nwithout a need to set up project from scratch.\n\neTask is implemented with [Spring Boot framework](https://spring.io/) so the developers can take full advantages of\nconcepts like Dependency Injection\nand Inversion of Control to interact with NAE modules and service beans.\n\n## Requirements\n\nThe application has some requirements for runtime environment. The following table is summary of requirements to\nrun and use the application:\n\n| Name                                                   | Version | Description                                                     | Recommendation                                                         |\n|--------------------------------------------------------|---------|-----------------------------------------------------------------|------------------------------------------------------------------------|\n| [Java](https://openjdk.java.net/)                      | 11+     | Java Development Kit                                            | [OpenJDK 11](https://openjdk.java.net/install/)                        |\n| [Redis](https://redis.io/)                             | 6+      | Key-value in-memory database used for user sessions and caching | [Redis 6.2.6](https://redis.io/download)                               |\n| [MongoDB](https://www.mongodb.com/)                    | 6+      | Main document store database                                    | [MongoDB 6](https://www.mongodb.com/docs/v6.0/installation/)           |\n| [Elasticsearch](https://www.elastic.co/elasticsearch/) | 7.17+   | Index database used for better application search               | [Elasticsearch 7.17.3](https://www.elastic.co/downloads/elasticsearch) |\n\nIf you are planning on developing docker container based solution you can use\nincluded [docker-compose](docker-compose.yml)\nconfiguration to run all necessary databases.\n\n### Generate certificates\n\nTo enable all functionality of the application like Public view (anonymous access to cases and tasks) it is\nrecommended to generate RSA certificate pair (private and public) to sign and verify JWT tokens used by the application.\n\nA quick way is to run following command:\n\n```shell\n mkdir -p src/main/resources/certificates \u0026\u0026 cd src/main/resources/certificates \u0026\u0026 openssl genrsa -out keypair.pem 4096 \u0026\u0026 openssl rsa -in keypair.pem -pubout -out public.crt \u0026\u0026 openssl pkcs8 -topk8 -inform PEM -outform DER -nocrypt -in keypair.pem -out private.der \u0026\u0026 cd ../../../..\n```\n\nCertificates are generated into folder src/main/resources/certificates from where are loaded by default\nYou can customize the path for private RSA certificate with environment variable _JWT_SIGN_CERT_.\n\n## Installation\n\neTask can be used as a starting project for your NAE application, or it can be run as is and deploy Petriflow\nprocesses at runtime.\n\n### Starter project\n\nThis project can be used as a base to your NAE application. Before you start coding please consider doing following\nsteps to personalize project:\n\n1. Rename root java package\n2. Edit maven project attributes in pom.xml, mainly groupId and artifactId\n3. Generate security certificates for token encryption\n\nAs it is Java [Maven](https://maven.apache.org/) project it is assumed that you have some experience with Java\nprogramming language.\n\n### Run as a jar\n\neTask is distributed as a standalone executable jar archive with every release. You can download it as a [release\nartifact](https://github.com/netgrif/etask-backend-starter/releases/latest), extract it from the zip, generate\ncertificates, and run it.\n\n```shell\nwget -O etask.zip https://github.com/netgrif/etask-backend-starter/releases/latest\nunzip etask.zip\ncd etask\ncd src/main/resources/certificates \u0026\u0026 openssl genrsa -out keypair.pem 4096 \u0026\u0026 openssl rsa -in keypair.pem -pubout -out public.crt \u0026\u0026 openssl pkcs8 -topk8 -inform PEM -outform DER -nocrypt -in keypair.pem -out private.der \u0026\u0026 cd ../../../..\njava -jar app-exec.jar\n```\n\nThe application listens on port 8080 and is connecting to locally run databases. To configure it use environment\nvariables.\n\n### Run as a container\n\neTask is also published as [Docker image](https://hub.docker.com/r/netgrif/etask-backend) available via Docker hub. You\ncan run it directly with docker:\n\n```shell\ndocker pull netgrif/etask-backend:latest\ndocker run -p 8080:8080 netgrif/etask-backend:latest\n```\n\nor with docker-compose file:\n\n```yaml\nversion: \"3.3\"\nservices:\n  mongo:\n    image: mongo:6\n    ports:\n      - \"27017:27017\"\n    networks:\n      - etask-network\n  elastic:\n    image: elasticsearch:7.17.4\n    environment:\n      - cluster.name=elasticsearch\n      - discovery.type=single-node\n      - http.host=0.0.0.0\n      - xpack.security.enabled=false\n      - transport.host=0.0.0.0\n    ports:\n      - \"9200:9200\"\n      - \"9300:9300\"\n    networks:\n      - etask-network\n  redis:\n    image: redis:6\n    ports:\n      - \"6379:6379\"\n    networks:\n      - etask-network\n  etask:\n    image: netgrif/etask-backend:latest\n    ports:\n      - \"8080:8080\"\n    networks:\n      - etask-network\n    depends_on:\n      mongo:\n        condition: service_healthy\n      elastic:\n        condition: service_healthy\n      redis:\n        condition: service_healthy\nnetworks:\n  etask-network:\n    driver: bridge\n```\n\n## Configuration\n\neTask can be configured with environment variables or with application.properties file if run locally from the\nrepository.\nBy default, the application expects that databases are run locally, for deployment you are encouraged to change it.\nThe application can be configured with these variables:\n\n| Variable                     | Type                | Default                                                                                                                               | Description                                                                                                                                                                                                                              |\n|------------------------------|---------------------|---------------------------------------------------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| MAX_UPLOAD_FILE_SIZE         | String              | 50MB                                                                                                                                  | Maximum size of uploaded file.                                                                                                                                                                                                           |\n| MONGO_URI                    | String              | mongodb://localhost:27017                                                                                                             | URI for MongoDB. Can be mongodb+srv connection scheme. If MongoDB requires authentication you must supply it the URI. \u003cbr/\u003eFor more info see [official documentation](https://www.mongodb.com/docs/manual/reference/connection-string/). |\n| DATABASE_NAME                | String              | etask                                                                                                                                 | Name od the database. The name is used for MongoDB, Elasticsearch, and Redis to keep consistent naming across all databases.                                                                                                             |\n| ELASTIC_URL                  | String              | localhost                                                                                                                             | Hostname for Elasticsearch without protocol and port.                                                                                                                                                                                    |\n| ELASTIC_PORT                 | Number              | 9300                                                                                                                                  | TCP communication port.                                                                                                                                                                                                                  |\n| ELASTIC_SEARCHPORT           | Number              | 9200                                                                                                                                  | REST API port for search requests.                                                                                                                                                                                                       |\n| ELASTIC_EXECUTORS            | Number              | 500                                                                                                                                   | Number of threads for execution of indexing of app resources (like tasks and cases).                                                                                                                                                     |\n| MAIL_FROM                    | String              | etask@example.com                                                                                                                     | Email from which is the application sending emails.                                                                                                                                                                                      |\n| MAIL_DOMAIN_APP_PORT         | Number              | 4200                                                                                                                                  | Port of the application that is used to resolve redirect links in the emails. If it is not imply, leave blank.                                                                                                                           |\n| MAIL_DOMAIN_APP              | String              | localhost                                                                                                                             | Hostname of the application that is used to resolve redirect links in the emails.                                                                                                                                                        |\n| MAIL_SSL_APP_ENABLED         | Boolean             | false                                                                                                                                 | Value to determine protocol to use for redirect link in the emails. True = HTTPS, False = HTTP                                                                                                                                           |\n| MAIL_HOST                    | String              |                                                                                                                                       | Url to email server                                                                                                                                                                                                                      |\n| MAIL_USERNAME                | String              |                                                                                                                                       | Username for authentication to email server. If it is not required leaved it blank.                                                                                                                                                      |\n| MAIL_PASSWORD                | String              |                                                                                                                                       | Password for authentication to email server. If it is not required leaved it blank.                                                                                                                                                      |\n| MAIL_PORT                    | Number              | 25                                                                                                                                    | Communication port for email server.                                                                                                                                                                                                     |\n| MAIL_DEBUG_ENABLED           | Boolean             | false                                                                                                                                 | Enable/Disable debug logging for email communication.                                                                                                                                                                                    |\n| MAIL_AUTH_ENABLED            | Boolean             | false                                                                                                                                 | Enable/Disable authentication for connecting to email server.                                                                                                                                                                            |\n| MAIL_TLS_ENABLED             | Boolean             | true                                                                                                                                  | Enable/Disable TLS encryption for communication with email server.                                                                                                                                                                       |\n| MAIL_PROTOCOL                | String              | smtp                                                                                                                                  | Protocol used for communicating with email server.                                                                                                                                                                                       |\n| REDIS_HOST                   | String              | localhost                                                                                                                             | Hostname for Redis database without port and protocol.                                                                                                                                                                                   |\n| REDIS_PORT                   | Number              | 6379                                                                                                                                  | Port for Redis.                                                                                                                                                                                                                          |\n| DATABASE_ENCRYPTION_PASSWORD | String              | password                                                                                                                              | Secret to use in encryption algorithm to encrypt process instance values.                                                                                                                                                                |\n| OPEN_REGISTRATION            | Boolean             | true                                                                                                                                  | Enable/Disable self registration of new users.                                                                                                                                                                                           |\n| REGISTRATION_TOKEN_VALIDITY  | Number              | 3                                                                                                                                     | Number of days for registration verification token is valid.                                                                                                                                                                             |\n| MINIMAL_PASSWORD_LENGTH      | Number              | 8                                                                                                                                     | Minimal length of user's password. Length is determine with stripped of blank characters.                                                                                                                                                |\n| CSRF_ENABLED                 | Boolean             | false                                                                                                                                 | Enable/Disable CRSF protection. It is recommended if frontend and backend of the app is accessed from the same domain.                                                                                                                   |\n| LIMITS_LOGIN_ATTEMPTS        | Number              | 50                                                                                                                                    | Number of login attempts before blocking the credentials for authenticating.                                                                                                                                                             |\n| LIMITS_LOGIN_BAN             | Number              | 1                                                                                                                                     | Number of time units for blocking to login into the app. Default time unit are days.                                                                                                                                                     |\n| JWT_VALIDITY                 | Number              | 900000                                                                                                                                | Number of seconds for JWT token to expire. Default value equal cca 10 days.                                                                                                                                                              |\n| JWT_SIGN_ALGORITHM           | String              | RSA                                                                                                                                   | Algorithm to use to sign JWT tokens.                                                                                                                                                                                                     |\n| JWT_SIGN_CERT                | File resource       | file:src/main/resources/certificates/private.der                                                                                      | File path to private key for signing JWT tokens.                                                                                                                                                                                         |\n| NO_AUTH_PATHS                | List of paths       | /api/auth/signup,/api/auth/token/verify,\u003cbr/\u003e/api/auth/reset,/api/auth/recover,/api/public/**,\u003cbr/\u003e/v3/api-docs/public,/manage/health | List of paths to be available even without authentication.                                                                                                                                                                               |\n| POSTAL_CODES_ENABLED         | Boolean             | false                                                                                                                                 | Enable/Disable import of list of postal codes.                                                                                                                                                                                           |\n| POSTAL_CODES_FILE            | String              | postal_codes.csv                                                                                                                      | Name of file in folder `src/main/resources` that contains postal codes to import.                                                                                                                                                        |\n| ADMIN_PASSWORD               | String              | password                                                                                                                              | Password for super admin account with login super@netgrif.com.                                                                                                                                                                           |\n| STORAGE_PATH                 | String              | storage                                                                                                                               | Path to folder that will be used as the application file storage. For larger deployments it is recommended to point to network attached drive.                                                                                           |\n| PDF_DEFAULT_NAME             | String              | generated_pdf.pdf                                                                                                                     | Default name of a generated pdf file.                                                                                                                                                                                                    |\n| AUTH_PROVIDERS               | List of class names | NetgrifBasicAuthenticationProvider                                                                                                    | List of names of authentication providers classes to use for verifying authentication of application's users.                                                                                                                            |\n| LDAP_ENABLED                 | Boolean             | false                                                                                                                                 | Enable/Disable LDAP connector.                                                                                                                                                                                                           |\n| LDAP_URL                     | String              | ldap://localhost:389                                                                                                                  | Url for LDAP server to connect. Url must include protocol (ldap or ldaps) and port (i.e. 389) of the LDAP server.                                                                                                                        |\n| LDAP_USERNAME                | String              |                                                                                                                                       | Username of technical account that is used for communication with LDAP server.                                                                                                                                                           |\n| LDAP_PASSWORD                | String              |                                                                                                                                       | Password of technical account that si used for communication with LDAP server.                                                                                                                                                           |\n| LDAP_BASE                    | String              |                                                                                                                                       | Path in LDAP tree for the search base of users.                                                                                                                                                                                          |\n| IMPERSONATION_ENABLED        | Boolean             | true                                                                                                                                  | Enable/Disable user impersonation functionality.                                                                                                                                                                                         |\n| GROUPS_DEFAULT_ENABLED       | Boolean             | true                                                                                                                                  | Enable/Disable user groups functionality.                                                                                                                                                                                                |\n| GROUPS_SYSTEM_ENABLED        | Boolean             | true                                                                                                                                  | Enable/Disable creation of default system user group.                                                                                                                                                                                    |\n| ACTIONS_RUNNER_CACHE_SIZE    | Number              | 500                                                                                                                                   | Size of cache for process actions.                                                                                                                                                                                                       |\n| FUNCTIONS_RUNNER_CACHE_SIZE  | Number              | 500                                                                                                                                   | Size of cache for process functions. For both function scopes are created separate cache of the same size.                                                                                                                               |\n| EXPRESSION_RUNNER_CACHE_SIZE | Number              | 500                                                                                                                                   | Size of cache for process expressions.                                                                                                                                                                                                   |\n| ACTIONS_EXTRA_IMPORTS        | List of classes     | com.netgrif.application.engine.petrinet.domain.I18nString                                                                             | Java classes to be automatically imported to process actions. Classes must be specified with package.                                                                                                                                    |\n| MAIL_HEALTH_ENABLED          | Boolean             | false                                                                                                                                 | Enable/Disable health check for email server connection.                                                                                                                                                                                 |\n\n### User creation\n\neTask offers a quick way to create local users at application startup. It is a convenient way to create admin or\ntechnical accounts to access the application without need of writing a code or registration process.\nSetting property `etask.users.\u003cuser\u003e.\u003cuser property\u003e`, a user is created at startup. If user with the specified\nemail already exists it is not created again. `\u003cuser\u003e` is a unique identifier of a user properties. Its name is not used\nin user creation process. Options for `\u003cuser properties\u003e` are defined in tables below:\n\n| Property                       | Type            | Description                                                                                                                                                                        |\n|--------------------------------|-----------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| etask.users.\u003cuser\u003e.email       | String          | Email of the user. Must be valid email address. Must be unique across whole system.                                                                                                |\n| etask.users.\u003cuser\u003e.name        | String          | Name of the user. If it consists of more words, the word before first space character is consider first name and other as a surname.                                               |\n| etask.users.\u003cuser\u003e.password    | String          | Password of the user. Password has to fulfill validation defined in property MINIMAL_PASSWORD_LENGTH.                                                                              |\n| etask.users.\u003cuser\u003e.authorities | List of strings | List of authorities that are assigned to user. System has already defined these authorities: ROLE_USER, ROLE_ADMIN. If a unknown authority is defined it is automatically created. |\n\nIf you cloned the repository you can simply add new properties\nto [application.properties](src/main/resources/application.properties) file.\n\nIf you are running the application as a jar archive you can simply specify properties as the application arguments like\n`java -jar app-exec.jar --etask.users.\u003cuser\u003e.email=\"some@email.com\" ...`.\n\nIf you are running the application as a container you can provide properties as environment variables.\n\n## Frontend app\n\nTo run complete eTask application there is also [eTask frontend](https://github.com/netgrif/etask-frontend-starter) web\napp. eTask frontend is an Angular SPA application that can be run on any web server or as a docker container.\nYou can use it as a starting point for your NAE application or run it as is.\n\n## Further help\n\nIf you need any help with the project you can write us a help request as\nan [issue](https://github.com/netgrif/etask-backend-starter/issues) or engage in\na [discussion](https://github.com/netgrif/etask-backend-starter/discussions) in\nthe repository.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetgrif%2Fetask-backend-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetgrif%2Fetask-backend-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetgrif%2Fetask-backend-starter/lists"}