ProjectForge 9.0.12
Mini release: tagged only, without jar or docker image, build it from the source code. Ready-made binaries: https://github.com/micromata/projectforge/releases/latest
Update of ProjectForge 9.0.0, what's new in ProjectForge 9: https://github.com/micromata/projectforge/releases/tag/9.0.0-RELEASE
- Security hardening: stricter access checks, Content Security Policy, second factor on more pages
- config.xml replaced by configuration parameters
- Polls reworked; contracts, currency pairs, skill matrix and 2FA setup migrated
- Order access for project managers per customer, customer group or business unit
- New user right Customers, to be granted by admins
- Forecast: current month and deleted orders corrected
Overview
- Security: changing, deleting and restoring an entry is decided by the stored entry, not only by the posted one; stricter Content Security Policy and new security headers; requests that change something are sent as POST; more pages require the second factor of their area; QR codes are no longer delivered as image links.
- Customers: creating, changing and deleting customers needs the new user right "Customers" (finance); being a member of the finance group is no longer enough, so admins have to grant it. The customer wizard also works with only one of the rights for customers and projects.
- Order access: finance and controlling grant project managers and project assistants read access to all orders of a customer, a customer group or a business unit, including invoices, forecast and contribution margins.
- Configuration: config.xml is replaced by configuration parameters with their own editors (holidays, JIRA servers, contract types, accounting settings) and taken over automatically on the first start; projectforge.properties can be compared with its backups.
- New interface: polls (reworked, with templates and a results tab), contracts, currency pairs, skill matrix, inbox and outbox, two-factor setup, customizing the menu, e-invoice checker and birthday butler migrated.
- Removed: the d.velop interface.
- Fixed: the forecast of the current month adds the invoiced figures and the remaining forecast, the plan is the order book of the planning date (deleted orders corrected); sorting customers by number; a damaged JCR repository no longer prevents the start when files are stored in the database.
All changes
Added
- Order access: finance and controlling grant project managers and project assistants read access to all orders of a customer, a customer group or a business unit, including their invoices, forecast and contribution margins (new tab in the customer groups editor).
- System page: projectforge.properties can be compared with its backups, or two backups with each other. Optionally the order is ignored, so only changed values and comments are shown; values of secrets stay hidden, only whether they changed is shown.
Improved
- Customize my menu: migrated to the new interface. Entries are dragged or clicked into the own menu, groups can be added, renamed and removed; empty groups are no longer stored as broken entries.
- When arranging chart dashboards, the drag handle (top left of a tile) and the tile menu (top right) are shown in solid orange.
- E-invoice checker: migrated to the new interface. Validity, invoice data, seller, buyer and amounts are shown side by side, amounts in the invoice's currency; embedded attachments are downloaded with a click.
- Notifications to be confirmed: several of them are shown underneath each other in one toast instead of stacked behind each other, and the toast steps aside while the bell's list is open.
- Birthday butler: migrated to the new interface. The current month is preselected, and without a configured organization the page says so instead of offering a download that can only fail.
Changed
- Two-factor authentication setup migrated to the new interface: mobile phone, authenticator app and WebAuthn tokens on one page, a token is renamed or deleted in a dialog. Deleting a WebAuthn token now also requires a recent second factor. Old links are redirected.
- config.xml replaced by configuration parameters
- Holidays, JIRA servers, contract types and the accounting settings (account number ranges, business assessment) are maintained on the configuration page as parameters, each with an own editor (rows of the business assessment movable, formulas and scripts checked on saving, JIRA urls and project keys checked as well); changes of the holidays apply without restart.
- An existing config.xml is taken over automatically on the first start (into the parameters still empty, its directories into projectforge.dir.* of projectforge.properties) and renamed to config.xml.migrated afterwards.
- The export of config.xml in the system administration is removed.
- Contracts migrated to the new interface: list with a period filter on the date, form with suggestions from other contracts, the configured contract types, JIRA links, attachments and cloning. A year filter stored by the former list is still shown and can be removed. Old links are redirected.
- Customers: new user right "Customers" (finance), like the one for projects. Creating, changing and deleting customers needs it with read and write access; being a member of the finance group is no longer enough, so admins have to grant it. The customer wizard needs it for new customers.
- Polls migrated to the new interface and reworked: list, form and answer page, questions reordered or taken from templates (built-in ones or own polls marked as template), polls cloned, a results tab beside the Excel export. Attendees and full access also by group (later members included). Multiple choice questions accept several answers again, answers stay with their question when questions change. Only users with full access see the results; finished polls can no longer be answered or changed, and their end is mailed once. Old links are redirected.
- Inbox and outbox migrated to the new interface: list and form, with the autocompletion of the free texts. Old links are redirected.
- Customer wizard: also usable with only one of the rights for customers and projects. With the right for customers only, a new customer is created (and optionally its structure element); with the right for projects only, a project is set up for an existing customer. With both, "No project" creates the customer only. The groups and their access rights are optional, and no group is preselected any more.
- Skill matrix migrated to the new interface: list and form, ratings as stars, the Excel export of the statistics in the list, and a mass update of rating, interest and comment. Old links are redirected.
- Currency pairs migrated to the new interface: list with the rate valid today, form with the conversion rates of the pair, edited in a dialog directly in the form. For a new rate, the rates of both directions are proposed from the online source for its date; the rate valid today is marked, rates still ahead are shown muted. Old links are redirected.
Fixed
- Customer list: sorting by the customer number works again.
- Forecast of the order statistics and its Excel export: in the current month, the invoiced figures and the remaining forecast are added (as well as the invoices and the forecast of the plan), instead of taking the greater value. The cumulated forecast and plan now match the sums of the project overview. The note on this in the Excel sheet 'Grafiken 1' is removed.
- Forecast plan: the plan is the order book of the planning date. The forecast charts of the order statistics now include the orders deleted since, as the Excel export does. Orders already deleted on the planning date are no longer part of it: daily (incremental) order book snapshots kept the orders deleted since the beginning of the month. This is corrected for existing snapshots as well.
- Files: with projectforge.files.store=db, a JCR repository that can't be opened (e.g. damaged) no longer prevents the start. ProjectForge starts without it and logs an error; files not yet migrated out of the JCR are missing then, and the migration, backup and sanity check of the JCR are skipped.
- Lists migrated to the new interface ignore columns and a sort order stored by the old list for columns it no longer has; columns missing from a stored order appear in their usual place instead of at the end.
- Properties editor: values of all parameters ending in "key" (e.g. projectforge.receiveSmsKey) are treated as secrets and no longer shown.
Removed
- The d.velop interface (synchronization of customers and vendors as trading partners) was removed.
Security
- More pages require the second factor of their area: the imports of salaries, incoming invoices and bank account records, the upload of incoming invoices, the bank accounts, currency pairs and conversion rates, the customer groups and the project wizard (finance), as well as the structure wizard, the caches and the Sipgate page (administration). The system statistics no longer require the second factor of the administration.
- The QR codes of the authenticator key (two-factor setup), of the REST client token (my account) and of the calendar subscriptions are sent within the response instead of as an image link, so the secret or token no longer shows up in access logs. QR code images are not cached anymore. The WebAuthn options no longer contain the session id, and changes of the two-factor setup check the CSRF token themselves.
- Security hardening
- Stricter Content Security Policy by default (no eval, no foreign frames, objects or form targets), new Referrer-Policy and Permissions-Policy headers, no conflicting X-Frame-Options any more. An own value of projectforge.security.csp-header-value stays as it is.
- The session id is renewed after a successful second factor.
- The preset of a new entry and the cloning of an entry require the right to add entries of this kind.
- Html of the forecast analysis and of list notes is escaped or sanitized more thoroughly.
- Polls: only participants answer, for themselves, and a user with full access on behalf of an attendee; the answers of others can no longer be overwritten, and parallel users no longer mix up their polls.
- Requests that change something (sending 2FA codes, system actions, cancelling jobs, logout, saving list and calendar filters and favorites) are sent as POST.
- Data transfer: who may change or delete an area is decided by its stored admins; a user can no longer make himself admin of an area by saving it.
- Project wizard: existing access rights of a group on the parent elements are only added to, never reduced; the preview shows nothing about elements the user may not see.
- Leave account corrections can be added by HR staff with write access only, also the preset of a new one.
- Skill matrix: saving a skill no longer moves it to another user.
- The unused QR code image endpoints are removed; QR codes are delivered as data urls only.
- Order book: whether a project manager may change or delete an order is decided by the stored order as well; saving a foreign order with the own project no longer takes it over.
- Ending a mass update (cancel) is sent as POST.
- Deleting and restoring an entry are decided by the stored entry as well, not only by the posted one: a foreign entry (e.g. a memo, timesheet or calendar) can no longer be taken over by deleting or restoring it with the own user as owner.
- Calendar events: changing or deleting an event also requires write access to its stored calendar; a foreign event can no longer be moved into the own calendar.
- To-dos, Merlin templates and polls: whether an entry may be changed is decided by the stored entry as well (assignee, admins, owner), not only by the saved one.
- System groups can no longer be deleted by sending them under another name.
- Bank accounts: whether an account may be changed or deleted is decided by the stored account; saving a foreign account with the own user as owner no longer takes it over.
- Addresses: adding an address to an address book requires full access to that book, also when it is saved along with an own one.
- Invoices: deleting an invoice is decided by its stored type and cancelled invoice; deleting it as a posted cancellation no longer resets the status of another invoice.