Introduction
ANA (Advanced Network Assistant) is a web application for IT-services teams. It keeps one record of everything you manage for each client site: domains and hosting, e-mail accounts, other credentials, network devices, ADSL lines, support tickets, scheduled visits and service contracts.
An installation has three parts, each on its own sub-domain:
| Part | Who uses it | Example address |
|---|---|---|
| Admin portal | Your staff | ana.your-company.com |
| Customer Portal | Your clients | support.your-company.com |
| Public page | Anyone: a landing page that links to both portals | www.your-company.com |
The Customer Portal has no database of its own. It shares the admin portal's database, so a reply written by staff appears to the client at once, and the other way round.
Requirements
- Web server: Apache with
mod_rewriteand.htaccessenabled. An ordinary cPanel account is enough. - PHP 8 with the
mysqli,openssl,mbstring,zipandcurlextensions. - MySQL or MariaDB: two databases (main and log) and one database user with full rights on both.
- Cron jobs for backups, reminders and renewal notices.
- An SMTP mailbox for outgoing mail (password resets, two-factor codes, notifications).
- A fixed IP address and a domain. The license is tied to both.
Installation
These steps describe a cPanel host. Other hosts work the same way; only the paths differ.
- Create the databases. Create a main database and a log database, and a database user with all privileges on both. Import the two supplied
.sqlfiles with phpMyAdmin. - Create three sub-domains: one for the admin portal, one for the Customer Portal and one for the public page.
- Create a private folder outside
public_html, for example/home/USER/ana_private/, with these sub-folders:db_bk(database backups),files_bk(file backups) andfiles(uploads). Nothing in this folder can be reached from the web. - Place
ana_config.phpin the private folder and fill in your details:
The file also holds the SMTP settings and thedefine('PRO_DB_NAME', 'main database name'); define('PRO_Log_DB_NAME', 'log database name'); define('PRO_DB_USER', 'database user'); define('PRO_DB_PASS', 'database password');SECRET_KEYused to encrypt stored credentials. - Upload each application folder to its sub-domain.
- Point the admin portal at your paths. In
includes/connection.phpset the path ofana_config.php, the application folder, the storage folders, and the public addresses of the Customer Portal and the public page. - Point the Customer Portal at the admin portal. In its
includes/customer_auth.phpsetADMIN_PROJECT_ROOTto the server path of the admin portal. - Set your brand. Edit
brand-config.phpin the public page and in the Customer Portal: company name, logo and the addresses of the portals. - Install your license as described in the next section.
- Add the cron jobs listed under Scheduled jobs.
Keep a copy of SECRET_KEY somewhere safe. Every stored password is encrypted with it. If the key is lost or changed, those passwords and all customer registration links become unreadable.
License activation
Each installation runs under a license file, license.lic. The file is digitally signed and names the domain and the server IP address it was issued for. It works only there, and any edit to the file makes it invalid.
Get your license file
- Sign in to your account on this site.
- Check that the domain and IP address shown on the license match your server.
- Choose Download license file.
Install it
- Upload
license.licto theincludes/folder of the admin portal, next toana_license.php. - Open the admin portal in your browser. If the license matches the server, the sign-in page appears.
What is checked
| Check | Detail |
|---|---|
| Signature | The file must be exactly as issued. |
| Expiry | Trial and yearly licenses carry an end date. Lifetime licenses do not. |
| Domain | The address in the browser must be the licensed domain or one of its sub-domains. www. is ignored. |
| Server IP | The IP address the web server answers on must be one of the licensed addresses. |
| Online status | Once a day the application asks our license server whether the license is still valid. It sends the license key, the domain, the server IP and the application version, and nothing else. If our server cannot be reached, the application keeps working. |
Changing domain or server
Write to support@adv-network.app with the new domain and IP address. We re-issue the license, and you download the new file from your account and replace the old one. The old file stops working shortly afterwards.
First sign-in
- Sign in to the admin portal as the initial Super Admin and change the password in your profile.
- Turn on two-factor authentication in your profile and store the backup codes.
- Open Admin Panel, enter your SMTP settings and send a test e-mail.
- In the same place, set the server time offset if your host runs on UTC, and the calendar's week start and weekend days.
- Run a first database backup to confirm the backup folder is writable.
- Add your staff under Users and choose which sites each of them may see.
- Fill the Reference List (device categories, currencies, ISPs, operating systems, software, remote tools), then add or import your sites.
Users and permissions
Every staff user has one of five privilege levels:
| Level | Name | By default can |
|---|---|---|
| 1 | Super Admin | Do everything, on all sites |
| 2 | Admin | View, add, edit, delete, disable and print |
| 3 | Manager | View, add, edit, disable and print (no delete) |
| 4 | Standard | View most pages |
| 5 | Guest | View only, with no statistics and no passwords |
Advanced privileges
A Super Admin can override any page for any user: view, add, edit, delete, disable and print are set separately. An override replaces the default in both directions, so it can open a page a user would not normally see, or close one they would.
Site access
Everything belongs to a site. A Super Admin sees all sites. Everyone else sees only the sites assigned to them, on every page and in every report.
Password visibility tiers
Each stored credential has a tier, and each user has one. A user sees a credential only when their tier is at least the credential's tier.
| Tier | Meaning | Default for |
|---|---|---|
| 3 | Admin | Super Admin, Admin |
| 2 | Power | Manager |
| 1 | Standard | Standard |
| 0 | None: sees no passwords | Guest |
Sites and contracts
A site is one client. Its page gathers the client's details, contact persons (each with several phones and e-mail addresses), contracts, visits and usage. Sites can be added one by one or imported from CSV.
Contracts
A contract has a start date and an optional end date, the number of regular and emergency visits per month, free remote minutes per month, and the rates for extra hours and extra visits.
Visits and usage
For each month ANA shows the remote time used against the allowance and the visits made against their quotas, and prints a statement. The client's coordinator sees the same figures in the Customer Portal.
Domains, e-mail and accounts
- Domain Providers: registrars and hosting companies with their login details.
- Domains: provider, site, renewal date and period, cost and currency, sub-domains, and cPanel and WordPress credentials with WordPress users and roles.
- E-Mails: mailboxes per domain with their credentials. They can be imported in bulk from CSV, including files saved from Excel.
- Accounts: a vault for any other service (software subscriptions, portals, licenses), grouped by category, with renewal dates, costs and local users.
Every list can be filtered, exported to CSV and, where it makes sense, imported from CSV.
Network and ADSL
Network / LAN is the device inventory of each site. A device record holds its category, specifications (CPU, operating system, model, serial number), disks, RAM modules, IP and MAC addresses, URLs, Wi-Fi details, connections, licenses, local users, credentials and attached files. A device can be duplicated or moved to another site, and each has a tab listing its tickets.
ADSL covers phone lines and subscriptions (ISP, number, renewal, cost) and routers (model, login and attached files such as configuration backups).
Tickets
Tickets are opened by staff or by clients through the Customer Portal. A ticket page has six tabs:
- Details: site, device, assignee and status.
- Messages: the conversation with the client. A message marked internal is a staff-only note the client never sees.
- Remote: a timer for remote sessions, showing the free remote time left this month.
- Parts: parts needed for the repair, each moving through requested, priced, approved, purchased, installed, tested.
- Files: attachments from both sides.
- History: everything that happened to the ticket.
Status follows the parts
When a ticket has parts, its status is set by the slowest one:
| Slowest part is | Ticket becomes |
|---|---|
| Requested | In progress |
| Priced | Waiting for price approval |
| Approved or purchased | Waiting for part |
| Installed | In progress |
| Tested | Ready for delivery |
A closed ticket is never changed automatically. Staff are alerted on every page to new client tickets and replies, notes from colleagues, tickets assigned to them, new device requests and new feedback.
Visits and tools
- Schedule: a monthly calendar of regular and emergency site visits, coloured per technician. Drag a visit to move it, hold Ctrl while dropping to copy it, or copy a whole month's pattern into another month.
- Visit reports: after a visit, record the hardware and software work per device. Once the client's coordinator approves the reports, the visit is locked.
- To-Do and Reminders: personal lists. Reminders are e-mailed when they fall due.
- Topics: a knowledge base with formatted text and attachments. A topic marked public is also shown in the Customer Portal.
Reports
Each report can be filtered and printed, and only shows the sites the user may see.
- Renewals Overview: domains, accounts, ADSL lines and licenses together, grouped by urgency
- Domain Renewals & Cost
- Account Renewals & Cost
- ADSL Renewals & Cost
- Network Asset Inventory
- Ticket / Maintenance History
Customer Portal
Clients register through a link that is unique to their site. Create it on the Customers page of the admin portal and send it to the client. A new account must confirm its e-mail address before it can sign in.
| A portal user can | Customer | Coordinator |
|---|---|---|
| Open, follow and reply to their own tickets | Yes | Yes |
| Read public help topics | Yes | Yes |
| Register their own device | Yes | Yes |
| Give feedback | Yes | Yes |
| See ticket costs and part prices | No | Yes |
| Manage the site's devices and users | No | Yes |
| Approve part prices and visit reports | No | Yes |
| Review monthly contract usage | No | Yes |
A coordinator is usually the client's office manager. Grant the role on the Customers page. The portal is available in English and Arabic, and customers can protect their account with two-factor authentication.
Device Info Collector
The collector is a small program for Windows and Linux that reads a computer's specifications: CPU, memory, disks, operating system, network addresses and remote-access ID. Staff download it from Tools; customers download it from the portal when registering a device.
- Paste from Collector on the Add Device form fills in the form for you to review.
- Update from Collector on an existing device refreshes its specifications and addresses.
- When a customer registers a device the site does not have yet, it appears as a pending request for staff to review, approve or reject.
Scheduled jobs
Add these four cron jobs. The schedule that matters is chosen inside ANA, so the cron lines never need changing.
| Script | Cron schedule | What it does |
|---|---|---|
cron_auto_backup.php | 0 5 * * * | Database backup, if one is due today |
cron_auto_files_backup.php | 0 5 * * * | Backup of uploaded files, if one is due today |
cron_send_reminders.php | */5 * * * * | E-mails personal reminders that have fallen due |
cron_send_renewal_notifications.php | 0 7 * * * | Sends each user their digest of upcoming renewals |
The scripts are in assets/cron_scripts/ of the admin portal. A cron line looks like this:
0 5 * * * php /home/USER/public_html/ana/assets/cron_scripts/cron_auto_backup.php
Backups
In Admin Panel a Super Admin can back up the main database, the log database or both, as .sql, .gz or .zip, and can download, delete or restore a backup, including one uploaded from another machine. Uploaded files are backed up separately as a zip archive.
Automatic backups run daily, weekly or monthly. Super Admins can choose to receive the result by e-mail.
Backups are stored on the same server. Copy them somewhere else regularly, so a failed server does not take the backups with it.
Security
- Two-factor authentication for staff and customers: authenticator app, e-mailed code, or one-time backup codes.
- Encrypted credentials: stored passwords are encrypted with AES-256, each with its own random IV.
- Sessions per device: a user can list their signed-in devices and sign any of them out. Disabling an account takes effect on the next click.
- Password resets use a link valid for 15 minutes and sign the user out everywhere.
- Audit log: sign-ins and every create, edit and delete, with user, time and IP address, including actions by customers.
- Private storage: the configuration file, backups and uploads live outside the web root. Uploaded files are always served as downloads.
We recommend serving all three sub-domains over HTTPS only, and requiring two-factor authentication for every staff account.
License troubleshooting
When the license does not match, the application shows a page with an error code, the domain and the server IP it detected. Compare those with the license in your account.
| Error | Meaning | What to do |
|---|---|---|
missing | No license file found | Upload license.lic to the includes/ folder |
corrupt / signature | The file was damaged or edited | Download it again and upload it in binary mode, unchanged |
expired | The end date has passed | Renew, then install the new file |
domain | The site is opened on a domain the license does not cover | Use the licensed address, or ask us to re-issue for the new domain |
ip | The server's IP address is not in the license | Send us the IP shown on the error page |
reissued | A newer license file exists | Download the current file from your account |
suspended / revoked | The license was switched off | Contact support |
On some hosts the web server sits behind a load balancer and answers on a private address such as 10.0.0.5. That private address is the one the license needs. The error page always shows the address to send us.
Support
Write to support@adv-network.app. To help us answer quickly, include your license key, the application version shown at the bottom of the sidebar, and a screenshot of any error.