diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..e10cd9eab --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,50 @@ +# Changelog + +All notable changes to ITFlow will be documented in this file. + +## [25.1] + +### Added / Changed +- Added ability to save cards in Stripe for automatic invoice payment +- Page titles now reflect the page name, client selection, company name, ticket info, invoice info etc. for easier multi tab navigation. +- Admin pages now once again use the new admin role-check +- Admin roles can now be archived +- Debug now shows the current git branch +- Auto-acknowledgement email for email-parsed tickets now contains a guest link +- Recurring tickets no longer require a contact +- Stripe online payment setup now prompts you to set the income/expense account +- New cron/cli scripts are in the scripts subfolder - please update your cron configurations! +- Moved all modal includes to /modals to tidy root directory +- Moved most include files to /includes to tidy root directory +- Moved guest pages to /guest to tidy directory structure +- Renamed include file pagination.php to filter_footer.php as it is used in conjunction with filter_header.php for page filtering +- Guest ticket feedback now shows friendly ticket prefix & number, rather than just the ID +- Individual POST handler logic pages can no longer be accessed directly +- Added payment deletion on Payments and client Payments Page +- Added Domains history tracking +- Added Asset Interface Linking / Connections to determine what interface is connected to what interface port of another asset +- Added Force Recurring Ticket in more places instead of just recurring tickets +- Row span and center devices that take up multiple units in a rack +- Added Tooltips to main nav badge counts to show what its actually counting +- Changed the Max records per page from 500 to 100 to prevent performance issues + +### Fixed +- Fixed ticket edit modal not showing multi-client/no-client projects +- Fixed asset interface losing DHCP setting +- Fixed creating / editing recurring expenses causing 500 error due to incorrect var name +- Fixed tickets created via portal/email not being marked as billable +- Fixed editing Recurring Expense +- Fixed a regression TinyMCE Editor not showing when adding or editing ticket templates + +### Removed / Deprecated +- Deprecated the current cron scripts in the root directory - change cron to use the ones in the scripts subfolder instead + +### BREAKING CHANGES +- Moved Client portal from /portal to /client - Links will be broken on previous emails, also you may need to update any other links for example website, support page etc? +- Moved guest links from / to /guest - Links will be broken on previous emails. + + +## [24.12] + +### Added / Changed +- First introduced versioned releases! diff --git a/README.md b/README.md index 6c1791cc6..4863620df 100644 --- a/README.md +++ b/README.md @@ -3,15 +3,10 @@ [![Contributors][contributors-shield]][contributors-url] [![Stargazers][stars-shield]][stars-url] -[![Issues][issues-shield]][issues-url] [![Commits][commit-shield]][commit-url] [![GPL License][license-shield]][license-url] -
-

ITFlow

@@ -47,43 +42,26 @@ ### The Problem -- You're a busy MSP with 101 things to do. -- Information about your clients is unorganised and unstructured: scattered in random tickets or folders - when you do eventually find it, it's out of date. -- For some issues, you spend longer looking for the relevant documentation than actually working the ticket. +- You're a small but busy managed service provider with 101 things to do. Information about your clients is unorganised, unstructured and outdated. +- For some work, you seem to spend longer looking for the relevant documentation than actually working on the issue/project. - On top of the technical day to day, you also have to take care of the financial side of the business - consistent pricing, quotes/invoicing, and accounting. ### The Solution: ITFlow -- ITFlow consolidates common MSP needs (IT Documentation, ticketing and billing) into one system - -### In Beta -* This project is in beta with many ongoing changes. Updates may unintentionally introduce bugs/security issues. Writing functional, secure code is very difficult. -* Whilst we are confident the code is safe, nothing in life is 100% safe or risk-free. Use your best judgement before deciding to store highly confidential information in ITFlow. -* We are hoping to have a stable 1.0 release by early 2025. +- ITFlow consolidates common MSP needs (documentation, ticketing and billing) into one unified system. ## Getting Started -ITFlow is self-hosted. There is a full installation guide in the [docs](https://docs.itflow.org/installation). - - - -### Installation via Script (Recommended Method) - - **Requirements** - - Clean Install of Debian 12 or Ubuntu 22.04 - - A public IP Address - - Ports 80 (HTTP) and 443 (HTTPS) TCP accessible from the outside in - - A Fully Qualified Domain Name pointing to the public IP Address – example itflow.example.com +### Self Hosting +- The best installation method is to use the [install script](https://docs.itflow.org/installation_script) on Ubuntu/Debian. A video walk through is available [here](https://www.youtube.com/watch?v=kKz9NOU_1XE). +``` + wget -O itflow_install.sh https://github.com/itflow-org/itflow-install-script/raw/main/itflow_install.sh + bash itflow_install.sh +``` +- Other manual installation methods are available in the [docs](https://docs.itflow.org/installation). - **Process** - - Login as root - - Download & run install script - ``` - wget -O itflow_install.sh https://github.com/itflow-org/itflow-install-script/raw/main/itflow_install.sh - bash itflow_install.sh - ``` - - Follow Instructions & navigate to setup URL shown - - Leave us feedback in the [forum](https://forum.itflow.org/d/11-road-map) +### Managed Hosting +- If you'd prefer, we can [host ITFlow for you](https://services.itflow.org/hosting.php). ## Key Features @@ -95,14 +73,7 @@ ITFlow is self-hosted. There is a full installation guide in the [docs](https:// ## Roadmap / Future to-do -* Comprehensive API to allow custom third party integration -* CalDAV to integrate with 3rd party calendars -* CardDAV to integrate with 3rd party Address books -* Recent caller toast alerts to click and bring up the clients account right away -* FIDO2 WebAuthn Support for passwordless auth (TPM Fingerprint), (USB Hardware keys such as Yubikey) - -See the [forum](https://forum.itflow.org/t/added-to-roadmap) and the [open issues](https://github.com/itflow-org/itflow/issues) for a full list of proposed features & known issues. - +We track the implementation of confirmed features and bugs via [TaskFlow](https://tasks.dev.itflow.org/tasks.php). Use the [forum](https://forum.itflow.org) to request features or raise bug reports. ## Support & Contributions @@ -111,7 +82,7 @@ See the [forum](https://forum.itflow.org/t/added-to-roadmap) and the [open issue For help using ITFlow, bugs, feature requests, and general ideas / discussions please use the community [forum](https://forum.itflow.org). ### Contributing -If you want to improve ITFlow, feel free to fork the repo and create a pull request, but make sure to discuss significant changes or new features with fellow contributors on the forum first. This helps ensure that your contributions are aligned with project goals, and saves time for everyone. All contributions should follow our [code standards](https://docs.itflow.org/code_standards). +If you want to improve ITFlow, feel free to fork the repo and create a pull reques. Make sure to discuss significant changes or new features with fellow contributors on the forum first. This helps ensure that your contributions are aligned with project goals, and saves time for everyone. All contributions should follow our [code standards](https://docs.itflow.org/code_standards). See the [contributing guide](https://docs.itflow.org/contribute). #### Contributors @@ -122,13 +93,14 @@ If you want to improve ITFlow, feel free to fork the repo and create a pull requ We’re incredibly grateful to the organizations and individuals who support the project - a big thank you to: - CompuMatter - F1 for HELP -- JetBrains - ## License - ITFlow is distributed "as is" under the GPL License, WITHOUT WARRANTY OF ANY KIND. See [`LICENSE`](https://github.com/itflow-org/itflow/blob/master/LICENSE) for details. +## Security +* As of 2025, we now have a stable release of the project. +* Whilst we are confident in the safety of the code, no system is risk-free. Nearly all software has bugs. Use your best judgement before storing highly confidential information in ITFlow. +* If you have a security concern, privately report it [here](https://github.com/itflow-org/itflow/security/policy). diff --git a/SECURITY.md b/SECURITY.md index f374eeacc..bd6ba7fd8 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,25 +1,21 @@ # Security Policy -## **Please do NOT report security concerns/vulnerabilities publicly (Github issues/forum)** +## **Please do NOT report security concerns/vulnerabilities publicly (Issues/forum)** ---- +**We take security seriously** -## In Beta - -ITFlow is currently in beta and is a work in progress. - -**We take security seriously.** Whilst we are confident the code is safe, nothing in life is 100% safe or risk-free. You should use your best judgment before entering confidential information into the app. - -We attempt to follow security best practices where possible, including [automated code scanning](https://sonarcloud.io/component_measures?id=itflow-org_itflow&metric=security_rating&view=list). - -[![Security](https://sonarcloud.io/api/project_badges/measure?project=itflow-org_itflow&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=itflow-org_itflow) +- Whilst we are confident in the safety of the code, no system is risk-free. Nearly all software has bugs. Use your best judgement before storing highly confidential information in ITFlow. +- We attempt to follow security best practices where possible, including [automated code scanning](https://sonarcloud.io/component_measures?id=itflow-org_itflow&metric=security_rating&view=list). +- [![Security](https://sonarcloud.io/api/project_badges/measure?project=itflow-org_itflow&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=itflow-org_itflow) ## Supported Versions +We operate a rolling release model. Any bug fixes will be released into latest version of ITFlow, so you must stay up-to-date. | Version | Supported | | ------- | ------------------ | -| Beta | :white_check_mark: | -| 1.0 | Yet to be released | +| Beta | :x: | +| 24.12 | :white_check_mark: | +| 25.1 | :white_check_mark: (When released) | ## Reporting a Vulnerability via GitHub Security Advisories diff --git a/accounts.php b/accounts.php index f23a0f7ee..f5f972da9 100644 --- a/accounts.php +++ b/accounts.php @@ -4,7 +4,7 @@ $sort = "account_name"; $order = "ASC"; -require_once "inc_all.php"; +require_once "includes/inc_all.php"; // Perms enforceUserPermission('module_financial'); @@ -109,18 +109,18 @@
- + - @@ -174,7 +174,7 @@
- + - + @@ -184,10 +184,10 @@
-
- + - + @@ -127,14 +127,14 @@
- + - + @@ -295,11 +295,11 @@
-
@@ -34,5 +34,5 @@
Archived
Archived - - ITFlow release version + + Current DB Version + + Current Code Commit - Current DB Version - + Current Branch + @@ -748,5 +755,5 @@ function getDirStats($dir) {
- + - - + + set('Cache.DefinitionImpl', null); // Disable cache by setting a non-existent directory or an invalid one $purifier_config->set('URI.AllowedSchemes', ['data' => true, 'src' => true, 'http' => true, 'https' => true]); $purifier = new HTMLPurifier($purifier_config); @@ -74,4 +75,4 @@ - diff --git a/admin_role.php b/admin_role.php index 241a116f0..db315d070 100644 --- a/admin_role.php +++ b/admin_role.php @@ -4,7 +4,7 @@ $sort = "user_role_is_admin"; $order = "DESC"; -require_once "inc_all_admin.php"; +require_once "includes/inc_all_admin.php"; //Rebuild URL @@ -110,11 +110,10 @@ - - - - + + Archive + @@ -125,7 +124,7 @@ -
@@ -73,5 +73,5 @@
-
+

Company Details

-
- -
-
- -
- -
-
- -
-
- "> -
-
- -
- -
- -
- -
-
- -
- -
-
- -
- -
-
- -
- -
-
- -
- -
-
- -
- -
-
- -
- -
-
- -
- -
-
- -
- -
-
- -
- -
-
- -
- -
-
- +
+ + +
- -
-
- -
- -
-
- + +
+
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
+
+ +
+ +
-
- -
- -
-
- -
- -
-
- -
- - -
-
@@ -120,5 +120,5 @@
@@ -249,4 +249,4 @@
@@ -39,5 +39,5 @@
-
@@ -102,5 +102,5 @@
@@ -327,5 +327,5 @@ -
@@ -78,5 +78,5 @@
@@ -193,4 +193,4 @@
@@ -25,7 +25,7 @@
">
- +
@@ -35,7 +35,7 @@
- +
@@ -45,7 +45,7 @@
- +
@@ -151,5 +151,5 @@
+ +
+
+

Online Payment - Client info

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
ClientStripe Customer IDStripe Payment ID
+ +
+ +
+ +
@@ -41,4 +41,4 @@
@@ -54,5 +54,5 @@
@@ -44,7 +44,7 @@
- +
@@ -62,5 +62,5 @@
@@ -38,5 +38,5 @@
@@ -63,5 +63,5 @@
@@ -82,5 +82,5 @@
-
-
5 ) { - require "admin_ticket_status_edit_modal.php"; + require "modals/admin_ticket_status_edit_modal.php"; } } @@ -123,13 +123,13 @@
-
- set('Cache.DefinitionImpl', null); // Disable cache by setting a non-existent directory or an invalid one $purifier_config->set('URI.AllowedSchemes', ['data' => true, 'src' => true, 'http' => true, 'https' => true]); $purifier = new HTMLPurifier($purifier_config); @@ -124,7 +125,7 @@ @@ -139,5 +140,5 @@ - @@ -231,13 +231,13 @@ function generatePassword() { - "; + $history_html .= "DateColumnOld ValueNew Value"; + while ($row = mysqli_fetch_array($history_sql)) { + // Fetch data from the query and create table rows + $history_html .= ""; + $history_html .= "" . htmlspecialchars(date('Y-m-d', strtotime($row['domain_history_modified_at']))) . ""; + $history_html .= "" . htmlspecialchars($row['domain_history_column']) . ""; + $history_html .= "" . htmlspecialchars($row['domain_history_old_value']) . ""; + $history_html .= "" . htmlspecialchars($row['domain_history_new_value']) . ""; + $history_html .= ""; + } + $history_html .= ""; + + // Return the HTML content to JavaScript + $response['history'] = $history_html; + echo json_encode($response); } @@ -306,10 +320,10 @@ // Return URL if ($item_type == "Login") { - $url = "https://$config_base_url/guest_view_item.php?id=$share_id&key=$item_key&ek=$login_encryption_key"; + $url = "https://$config_base_url/guest/guest_view_item.php?id=$share_id&key=$item_key&ek=$login_encryption_key"; } else { - $url = "https://$config_base_url/guest_view_item.php?id=$share_id&key=$item_key"; + $url = "https://$config_base_url/guest/guest_view_item.php?id=$share_id&key=$item_key"; } $sql = mysqli_query($mysqli,"SELECT * FROM companies WHERE company_id = 1"); @@ -346,7 +360,7 @@ ] ]; - addToMailQueue($mysqli, $data); + addToMailQueue($data); } diff --git a/blank.php b/blank.php index 2e83e0bf7..b5cf1f1de 100644 --- a/blank.php +++ b/blank.php @@ -1,4 +1,4 @@ - +