The SaaS admin panel
The admin panel at https://<your-host>/admin is where the people who run Zappocity manage every customer: tenants, their domains, mailboxes and aliases, plans, shared domains and signup. It uses the same /v1 API as VaultDrop, so anything the panel does can also be scripted.
Administrators are separate from mail accounts. A customer's owner or admin cannot sign in here, and an administrator has no mailbox unless you also create one.
Create the first administrator
On a server installed with make install (see Install on a server):
sudo make admin EMAIL=ops@example.com
That runs corpsuited set-admin as the service user with the service's settings. Anywhere else, run it yourself with the same CORPSUITE_* settings the server uses:
corpsuited set-admin ops@example.com "Operations"
It asks for a password (at least 12 characters; nothing is shown as you type). In a script, pipe the password in on standard input instead of putting it on the command line:
corpsuited set-admin ops@example.com < /path/to/password-file
Running it again for the same address sets a new password, re-enables the administrator and signs out all of its sessions. To remove someone's access:
corpsuited disable-admin ops@example.com
That signs them out everywhere at once.
Signing in
Open /admin and sign in with the email and password you set. Sessions last 12 hours and end after one hour without use. Sign out ends the session on the server, not only in your browser.
Five wrong passwords for one administrator, or from one network address, within 15 minutes block further tries until the 15 minutes are up. Every sign-in, failed sign-in and change made in the panel is written to the server log with the administrator's address.
Two panels: Zappocity and Mailocity
The admin panel is two panels, each with its own address:
- Zappocity (
/adminon the Zappocity host, such aszappo.city/admin): customers, accounts, plans and money. - Mailocity (the admin host, or
/adminon the mail server's own name, such asmailo.city/admin): mail.
Each links to the other at the bottom of its menu, and a page of one asked for on the other's host opens on the right host (you sign in once per host, or with single sign-on). With no Zappocity host set, one address shows both and the link switches between them.
What each page does
Zappocity panel
- Overview: open help desk tickets, open invoices, tenants waiting for payment or approval, and where things are.
- Customers: organizations (who pay), people (who sign in) and mailboxes, found with one search in tabs; subscriptions and billing on an organization's page; merging duplicates (see Zappocity customers).
- Mailboxes (formerly Accounts): find any mailbox by address, name or tenant. Its page shows the Zappocity account that signs in to it, and the account (status, two-step sign-in, verification, last sign-in) and the account actions under More: Limits (a mailbox's own sending and storage limits; see Sending limits), Features, Sign-ins, Notes, Verify, Invites (the mailbox's invitation allowance), Signup checks, Unlock and Reset two-step, and its tenant's plan and seats. Mailbox goes to the mailbox in Mailocity.
- Products and Plans: what is sold, plans' limits, features and prices, and whether each plan is offered at signup.
- Billing, Help desk and Invitations.
- Staff: who can sign in to the panels. Staff are Zappocity accounts in the staff organization (your own; choose it once on this page, being a member of it yourself). Add staff (top right) takes the email of a Zappocity account in that organization, a name and a role (Support, Billing, Abuse desk, Read only or Owner); they sign in with their Zappocity account (a panel password is optional, for signing in without Zappocity while that is allowed). Permissions on a staff member's row chooses exactly what they may do (changing them signs them out), and Disable stops them signing in. Anyone who leaves the staff organization is disabled within a minute ("not in the staff organization") and enabled again if they come back. Needs the staff permission.
- Settings, in tabs: Signup, Invitations (mailboxes still make and send their links in webmail; how many they get is set here), Sign-in security, Abuse protection, Single sign-on, Payments, Zappocity mail.
Mailocity panel
- Overview: tenants, tenants waiting for payment or approval, plans and shared domains, and the newest tenants.
- Tenants: search and create tenants. A tenant's page shows its usage and lets you rename, suspend or activate it (its plan and seats are changed in Zappocity). Below are its domains (Mark as proved on unproved ones), mailboxes, aliases, reports, complaints, spam policy and the mail waiting to be sent. Each mailbox has Account (its account in Zappocity) and the mail actions under More: Edit, Suppressions, Resume sending, Import, Legal export, API tokens, Open as user and Suspend.
- Domain pages (from a tenant, or from Shared domains): the DNS records to publish, every mail setting from SPF, DKIM and DMARC, MTA-STS and plus addressing, and the DKIM keys.
- Shared domains: the domains free and solo accounts get addresses on.
- Reports: spam and phishing reported by mailboxes, and complaints from providers' feedback loops.
- Support (Mailocity's own tickets) and Legal exports.
- Settings, in tabs: Mail delivery (MTA-STS, spam filtering, the feedback loop), Domains, Notice mail, Welcome email, Host names and HTTPS.
The domain admin panel for customers' tenant admins (/manage) is unchanged: it keeps everything about its tenant in one place.
In tables, a row's first action (such as Edit) is a button and the rest are under More, so wide tables do not scroll sideways; Escape or a click elsewhere closes the menu.
Not in the panel yet: tenant and domain Sieve rules, mailboxes' filters and vacation replies, and managing administrators (use the commands above). They are in the API today; see api/openapi.yaml.
The signup page
The public signup page is at /signup, linked from the homepage. It shows the plans and shared domains you have offered and creates the account. When signup is closed, or nothing is offered, it says so. See Plans, free mail and signup for what each switch does.
How the panel is protected
- The session cookie is
HttpOnly,SecureandSameSite=Strict, and named with the__Host-prefix, so it is only sent over HTTPS to this exact host and scripts cannot read it. In dev mode over plain HTTP it dropsSecureand the prefix. - Every API call made with the cookie must also carry the session's CSRF token in an
X-CSRF-Tokenheader, so another site cannot make your browser act in the panel. - Only a hash of each session token is stored in the database.
- The pages load scripts and styles only from this server (a strict Content Security Policy) and build the page as text, so a tenant or domain name cannot inject markup.