diff --git a/management/templates/aliases.html b/management/templates/aliases.html index 69bc62c4..c43467a0 100644 --- a/management/templates/aliases.html +++ b/management/templates/aliases.html @@ -1,198 +1,201 @@ - +
-

Aliases

+ -

Add a mail alias

+
+
-

Aliases are email forwarders. An alias can forward email to a mail user or to any email address.

+

Aliases

-
-
-
-
- - -
- +

Add a mail alias

+ +

Aliases are email forwarders. An alias can forward email to a mail user or to any email address.

+ + +
+
+
+ + +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ + +
+
+ + +

Existing mail aliases

+ + + + + + + + + + +
Alias
Forwards To
+ +

Hostmaster@, postmaster@ and admin@ email addresses are required on some domains.

+ +
+ + + + + + +
+ + + + + + +
+
+ +
-
-
- -
- -
-
-
- -
- -
-
-
-
- - -
-
- -

Existing mail aliases

- - - - - - - - - - -
Alias
Forwards To
- -

Hostmaster@, postmaster@, and admin@ email addresses are required on some domains.

- -
- - - - - - -
- - - - - - -
-
- - - + function aliases_reset_form() { + $("#addaliasEmail").prop('disabled', false); + $("#addaliasEmail").val('') + $("#addaliasTargets").val('') + $('#alias-cancel').addClass('hidden'); + $('#add-alias-button').text('Add Alias'); + is_alias_add_update = false; + } + + function aliases_edit(elem) { + var email = $(elem).parents('tr').attr('data-email'); + var targetdivs = $(elem).parents('tr').find('.target div'); + var targets = ""; + for (var i = 0; i < targetdivs.length; i++) + targets += $(targetdivs[i]).text() + "\n"; + + is_alias_add_update = true; + $('#alias-cancel').removeClass('hidden'); + $("#addaliasEmail").prop('disabled', true); + $("#addaliasEmail").val(email); + $("#addaliasTargets").val(targets); + $('#add-alias-button').text('Update'); + $('body').animate({ scrollTop: 0 }) + } + + function aliases_remove(elem) { + var email = $(elem).parents('tr').attr('data-email'); + show_modal_confirm( + "Remove Alias", + "Remove " + email + "?", + "Remove", + function() { + api( + "/mail/aliases/remove", + "POST", + { + source: email + }, + function(r) { + // Responses are multiple lines of pre-formatted text. + show_modal_error("Remove User", $("
").text(r));
+              show_aliases();
+            });
+        });
+    }
+    
+
+
\ No newline at end of file diff --git a/management/templates/custom-dns.html b/management/templates/custom-dns.html index 8f0a0217..56d0531e 100644 --- a/management/templates/custom-dns.html +++ b/management/templates/custom-dns.html @@ -1,99 +1,105 @@ - +
+
+
-

Custom DNS

+

Custom DNS

-

This is an advanced configuration page.

+

This is an advanced configuration page.

-

It is possible to set custom DNS records on domains hosted here.

+

It is possible to set custom DNS records on domains hosted here.

-

Using a Secondary Nameserver

+

Using a Secondary Nameserver

-

If your TLD requires you to have two separate nameservers, you can either set up a secondary (aka “slave”) nameserver or, alternatively, set up external DNS and ignore the DNS server on this box. If you choose to use a seconday/slave nameserver, you must find a seconday/slave nameserver service provider. Your domain name registrar or virtual cloud provider may provide this service for you. Once you set up the seconday/slave nameserver service, enter the hostname of their secondary nameserver:

+

If your TLD requires you to have two separate nameservers, you can either set up a secondary (aka “slave”) nameserver or, alternatively, set up external DNS and ignore the DNS server on this box. If you choose to use a seconday/slave nameserver, you must find a seconday/slave nameserver service provider. Your domain name registrar or virtual cloud provider may provide this service for you. Once you set up the seconday/slave nameserver service, enter the hostname of their secondary nameserver:

-
-
- -
- + +
+ +
+ +
+
+
+
+ +
+
+ + + +

Custom DNS API

+ +

Use your box’s DNS API to set custom DNS records on domains hosted here. For instance, you can create your own dynamic DNS service.

+ +

Send a POST request like this:

+ +
curl -d "" --user {email}:{password} https://{{hostname}}/admin/dns/set/qname[/rtype[/value]]
+ +

HTTP POST parameters

+ + + + + + + + +
Parameter Value
email The email address of any administrative user here.
password That user’s password.
qname The fully qualified domain name for the record you are trying to set.
rtype The resource type. A if omitted. Possible values: A (an IPv4 address), AAAA (an IPv6 address), TXT (a text string), or CNAME (an alias, which is a fully qualified domain name).
value The new record’s value. If omitted, the IPv4 address of the remote host is used. This is handy for dynamic DNS! To delete a record, use “__delete__”.
+ +

Note that -d "" is merely to ensure curl sends a POST request. You do not need to put anything inside the quotes. You can also pass the value using typical form encoding in the POST body.

+ +

Strict SPF and DMARC records will be added to all custom domains unless you override them.

+ +

Examples:

+ +
# sets laptop.mydomain.com to point to the IP address of the machine you are executing curl on
+            curl -d "" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/laptop.mydomain.com
+
+            # sets an alias
+            curl -d "" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/foo.mydomain.com/cname/bar.mydomain.com
+
+            # clears the alias
+            curl -d "" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/bar.mydomain.com/cname/__delete__
+
+            # sets a TXT record using the alternate value syntax
+            curl -d "value=something%20here" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/foo.mydomain.com/txt
+            
+ +
-
-
-
- -
-
- - -

Custom DNS API

+ -

Send a POST request like this:

- -
curl -d "" --user {email}:{password} https://{{hostname}}/admin/dns/set/qname[/rtype[/value]]
- -

HTTP POST parameters

- - - - - - - - -
Parameter Value
email The email address of any administrative user here.
password That user’s password.
qname The fully qualified domain name for the record you are trying to set.
rtype The resource type. A if omitted. Possible values: A (an IPv4 address), AAAA (an IPv6 address), TXT (a text string), or CNAME (an alias, which is a fully qualified domain name).
value The new record’s value. If omitted, the IPv4 address of the remote host is used. This is handy for dynamic DNS! To delete a record, use “__delete__”.
- -

Note that -d "" is merely to ensure curl sends a POST request. You do not need to put anything inside the quotes. You can also pass the value using typical form encoding in the POST body.

- -

Strict SPF and DMARC records will be added to all custom domains unless you override them.

- -

Examples:

- -
# sets laptop.mydomain.com to point to the IP address of the machine you are executing curl on
-curl -d "" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/laptop.mydomain.com
-
-# sets an alias
-curl -d "" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/foo.mydomain.com/cname/bar.mydomain.com
-
-# clears the alias
-curl -d "" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/bar.mydomain.com/cname/__delete__
-
-# sets a TXT record using the alternate value syntax
-curl -d "value=something%20here" --user me@mydomain.com:###### https://{{hostname}}/admin/dns/set/foo.mydomain.com/txt
-
- - +
\ No newline at end of file diff --git a/management/templates/external-dns.html b/management/templates/external-dns.html index 2bad47c4..c9d93137 100644 --- a/management/templates/external-dns.html +++ b/management/templates/external-dns.html @@ -1,77 +1,87 @@ - +
-

External DNS

- -

This is an advanced configuration page.

- -

Although your box is configured to serve its own DNS, it is possible to host your DNS elsewhere — such as in the DNS control panel provided by your domain name registrar or virtual cloud provider — by copying the DNS zone information shown in the table below into your external DNS server’s control panel.

- -

If you do so, you are responsible for keeping your DNS entries up to date! If you previously enabled DNSSEC on your domain name by setting a DS record at your registrar, you will likely have to turn it off before changing nameservers.

- - - - - - - - - - - -
QNameTypeValue
- - + #external_dns_settings .heading.first td { + border-top: none; + padding-top: 0; + } + #external_dns_settings .values td { + border: 0; + padding-top: .75em; + padding-bottom: 0; + max-width: 50vw; + word-wrap: break-word; + } + #external_dns_settings .explanation td { + border: 0; + padding-top: .5em; + padding-bottom: .75em; + font-style: italic; + font-size: 95%; + color: #777; + } + + +
+
+ +

External DNS

+ +

This is an advanced configuration page.

+ +

Although your box is configured to serve its own DNS, it is possible to host your DNS elsewhere — such as in the DNS control panel provided by your domain name registrar or virtual cloud provider — by copying the DNS zone information shown in the table below into your external DNS server’s control panel.

+ +

If you do so, you are responsible for keeping your DNS entries up to date! If you previously enabled DNSSEC on your domain name by setting a DS record at your registrar, you will likely have to turn it off before changing nameservers.

+ + + + + + + + + + + +
QNameTypeValue
+ +
+
+ + + +
diff --git a/management/templates/index.html b/management/templates/index.html index ea3b57ac..8c05d3ac 100644 --- a/management/templates/index.html +++ b/management/templates/index.html @@ -17,13 +17,43 @@ @import url(https://fonts.googleapis.com/css?family=Raleway:400,700); @import url(https://fonts.googleapis.com/css?family=Ubuntu:300); - html { - overflow-y: scroll; - } + html { + overflow-y: scroll; + } + + html, + body { + height: 100%; + } + + #wrap { + min-height: 100%; + height: auto !important; + height: 100%; + margin: 0 auto -50px; + } + + #push, + #footer { + height: 50px; + } + + @media (max-width: 767px) { + #footer { + margin-left: -20px; + margin-right: -20px; + padding-left: 20px; + padding-right: 20px; + } + } body { padding-top: 50px; - padding-bottom: 20px; + } + footer { + padding-top: 10px; + font: bold italic medium; + border-top: 1px solid #e5e5e5; } p { @@ -61,9 +91,9 @@ margin: 1.5em 0; } - ol li { - margin-bottom: 1em; - } + ol li { + margin-bottom: 1em; + } +
-
-

Checking and Sending Mail

+ +
+
+ +

Checking and Sending Mail

+ +
+
+

How to log in

Your username and password are the same no matter how you check your mail:

@@ -28,41 +35,45 @@
  • On iOS devices, look for Exchange or ActiveSync.
  • -
    -
    -

    IMAP/SMTP settings

    +
    +
    -

    This method is preferred on Android devices but is not available on iOS devices.

    +

    IMAP/SMTP settings

    -

    Your mail server is {{hostname}}. Use the following settings when prompted:

    +

    This method is preferred on Android devices but is not available on iOS devices.

    - - - - - - -
    Protocol Port Options
    IMAP 993 SSL
    SMTP 587 STARTTLS (“always” or “required”, if prompted)
    +

    Your mail server is {{hostname}}. Use the following settings when prompted:

    -

    In addition to setting up your email, you’ll also need to set up contacts and calendar synchronization separately.

    -
    + + + + + + +
    Protocol Port Options
    IMAP 993 SSL
    SMTP 587 STARTTLS (“always” or “required”, if prompted)
    -
    -

    Exchange/ActiveSync settings

    +

    In addition to setting up your email, you’ll also need to set up contacts and calendar synchronization separately.

    -

    On iOS devices and devices on this compatibility list, set up your mail as an Exchange or ActiveSync server. Use these settings when prompted:

    +
    +
    - - - -
    Server {{hostname}}
    Options Secure Connection
    +

    Exchange/ActiveSync settings

    + +

    On iOS devices and devices on this compatibility list, set up your mail as an Exchange or ActiveSync server. Use these settings when prompted:

    + + + + +
    Server {{hostname}}
    Options Secure Connection
    + +

    Your device should also provide a contacts list and calendar that syncs to this box when you use this method.

    + +
    +
    -

    Your device should also provide a contacts list and calendar that syncs to this box when you use this method.

    -
    -
    -
    +

    Other information about mail on your box

    Greylisting

    @@ -70,6 +81,7 @@

    Use this box to send as you

    Your box sets strict email sending policies for your domain names to make it harder for spam and other fraudulent mail to claim to be you. Only this machine is authorized to send email on behalf of your domain names. If you use any other service to send email as you, it will likely get spam filtered by recipients.

    +
    diff --git a/management/templates/ssl.html b/management/templates/ssl.html index 1e03787f..a422fe7f 100644 --- a/management/templates/ssl.html +++ b/management/templates/ssl.html @@ -1,118 +1,123 @@ - +
    +
    +
    -

    SSL Certificates

    +

    SSL Certificates

    -

    Certificate Status

    +

    Certificate Status

    + + + + + + + + + + +
    DomainCertificate StatusActions
    - - - - - - - - - - -
    DomainCertificate StatusActions
    +

    Install SSL Certificate

    -

    Install SSL Certificate

    +

    There are many places where you can get a free or cheap SSL certificate. We recommend Namecheap’s $9 certificate or StartSSL’s free express lane.

    -

    There are many places where you can get a free or cheap SSL certificate. We recommend Namecheap’s $9 certificate or StartSSL’s free express lane.

    +

    Which domain are you getting an SSL certificate for?

    -

    Which domain are you getting an SSL certificate for?

    +

    -

    + +
    +
    - + function install_cert() { + api( + "/ssl/install", + "POST", + { + domain: $('#ssldomain').val(), + cert: $('#ssl_paste_cert').val(), + chain: $('#ssl_paste_chain').val() + }, + function(status) { + if (status == "") { + show_modal_error("SSL Certificate Installation", "Certificate has been installed. Check that you have no connection problems to the domain.", function() { show_ssl(); $('#csr_info').slideUp(); }); + } else { + show_modal_error("SSL Certificate Installation", status); + } + }); + } + + +
    \ No newline at end of file diff --git a/management/templates/sync-guide.html b/management/templates/sync-guide.html index ca1cf3cf..656d26f2 100644 --- a/management/templates/sync-guide.html +++ b/management/templates/sync-guide.html @@ -1,49 +1,55 @@ -
    -

    Contacts & Calendar Synchronization

    +
    +
    +
    -

    This box can hold your contacts and calendar, just like it holds your email.

    +

    Contacts & Calendar Synchronization

    -
    +

    This box can hold your contacts and calendar, just like it holds your email.

    -
    -
    -

    In your browser

    +
    -

    You can edit your contacts and calendar from your web browser.

    +
    +
    +
    +
    +

    In your browser

    - - - - -
    For... Visit this URL
    Contacts https://{{hostname}}/cloud/contacts
    Calendar https://{{hostname}}/cloud/calendar
    +

    You can edit your contacts and calendar from your web browser.

    -

    Log in settings are the same as with mail: your - complete email address and your mail password.

    -
    + + + + +
    For... Visit this URL
    Contacts https://{{hostname}}/cloud/contacts
    Calendar https://{{hostname}}/cloud/calendar
    -
    -

    On your mobile device

    +

    Log in settings are the same as with mail: your + complete email address and your mail password.

    -

    If you set up your mail using Exchange/ActiveSync, - your contacts and calendar may already appear on your device.

    -

    Otherwise, here are some apps that can synchronize your contacts and calendar to your Android phone.

    +
    +
    +

    On your mobile device

    - - - - - -
    For... Use...
    Contacts and Calendar DAVdroid ($3.69; free here)
    Only Contacts CardDAV-Sync free beta (free)
    Only Calendar CalDAV-Sync ($2.89)
    +

    If you set up your mail using Exchange/ActiveSync, + your contacts and calendar may already appear on your device.

    +

    Otherwise, here are some apps that can synchronize your contacts and calendar to your Android phone.

    -

    Use the following settings:

    + + + + + +
    For... Use...
    Contacts and Calendar DAVdroid ($3.69; free here)
    Only Contacts CardDAV-Sync free beta (free)
    Only Calendar CalDAV-Sync ($2.89)
    - - - - - - -
    Account Type CardDAV or CalDAV
    Server Name {{hostname}}
    Use SSL Yes
    Username Your complete email address.
    Password Your mail password.
    -
    -
    +

    Use the following settings:

    + + + + + + + +
    Account Type CardDAV or CalDAV
    Server Name {{hostname}}
    Use SSL Yes
    Username Your complete email address.
    Password Your mail password.
    + +
    +
    diff --git a/management/templates/system-backup.html b/management/templates/system-backup.html index aab39857..6b7f5431 100644 --- a/management/templates/system-backup.html +++ b/management/templates/system-backup.html @@ -1,89 +1,99 @@ - +
    -

    Backup Status

    + -

    Copying Backup Files

    +
    +
    -

    The box makes an incremental backup each night. The backup is stored on the machine itself. You are responsible for copying the backup files off of the machine.

    +

    Backup Status

    -

    Many cloud providers make this easy by allowing you to take snapshots of the machine's disk.

    +

    Copying Backup Files

    -

    You can also use SFTP (FTP over SSH) to copy files from . These files are encrpyted, so they are safe to store anywhere. Copy the encryption password from also but keep it in a safe location.

    +

    The box makes an incremental backup each night. The backup is stored on the machine itself. You are responsible for copying the backup files off of the machine.

    -

    Current Backups

    +

    Many cloud providers make this easy by allowing you to take snapshots of the machine's disk.

    -

    The backup directory currently contains the backups listed below. The total size on disk of the backups is .

    +

    You can also use SFTP (FTP over SSH) to copy files from . These files are encrpyted, so they are safe to store anywhere. Copy the encryption password from also but keep it in a safe location.

    - - - - - - - - - -
    WhenTypeSizeDeleted in...
    +

    Current Backups

    -

    The size column in the table indicates the size of the encrpyted backup, but the total size on disk shown above includes storage for unencrpyted intermediate files.

    +

    The backup directory currently contains the backups listed below. The total size on disk of the backups is .

    - + if (r.backups.length == 0) { + var tr = $('No backups have been made yet.'); + $('#backup-status tbody').append(tr); + } + + for (var i = 0; i < r.backups.length; i++) { + var b = r.backups[i]; + var tr = $(''); + if (b.full) tr.addClass("full-backup"); + tr.append( $('').text(b.date_str + " " + r.tz) ); + tr.append( $('').text(b.date_delta + " ago") ); + tr.append( $('').text(b.full ? "full" : "increment") ); + tr.append( $('').text( nice_size(b.encsize)) ); + if (b.deleted_in) + tr.append( $('').text(b.deleted_in) ); + else + tr.append( $('n/a') ); + $('#backup-status tbody').append(tr); + + total_disk_size += b.size; + total_disk_size += b.encsize; + } + + $('#backup-total-size').text(nice_size(total_disk_size)); + }) + } + + +
    \ No newline at end of file diff --git a/management/templates/system-status.html b/management/templates/system-status.html index 82f49c6b..a6445afb 100644 --- a/management/templates/system-status.html +++ b/management/templates/system-status.html @@ -1,86 +1,96 @@ -

    System Status Checks

    +
    - - - - - - - -
    - - + #system-checks .status-error td { + color: #733; + } + #system-checks .status-warning td { + color: #770; + } + #system-checks .status-ok td { + color: #040; + } + #system-checks div.extra { + display: none; + margin-top: 1em; + max-width: 50em; + word-wrap: break-word; + } + #system-checks a.showhide { + display: none; + font-size: 85%; + } + #system-checks .pre { + margin: 1em; + font-family: monospace; + white-space: pre-wrap; + } + + +
    +
    + +

    System Status Checks

    + + + + + + +
    + +
    +
    + + + +
    \ No newline at end of file diff --git a/management/templates/users.html b/management/templates/users.html index 3f54cac9..2c2c1f06 100644 --- a/management/templates/users.html +++ b/management/templates/users.html @@ -1,252 +1,261 @@ -

    Users

    +
    - + -

    Add a mail user

    +
    +
    -

    Add an email address to this system. This will create a new login username/password. (Use aliases to create email addresses that forward to existing accounts.)

    +

    Users

    -
    -
    - - -
    -
    - - -
    -
    - -
    - -
    -

    - Passwords must be at least four characters and may not contain spaces. - Administrators get access to this control panel. -

    +

    Add a mail user

    -

    Existing mail users

    - - - - - - - - - - -
    Email AddressActionsMailbox Size
    +

    Add an email address to this system. This will create a new login username/password. (Use aliases to create email addresses that forward to existing accounts.)

    -
    - - - - + + + + + +
    - - - +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    +

    + Passwords must be at least four characters and may not contain spaces. + Administrators get access to this control panel. +

    - - - set password - - | - +

    Existing mail users

    + + + + + + + + + + +
    Email AddressActionsMailbox Size
    - - +
    + + + + - - - - - -
    + + + - - archive account - - -
    -
    To restore account, create a new account with this email address. Or to permanently delete the mailbox, delete the directory on the machine.
    + + + set password + + | + - -
    -
    + + + + archive account + +
    +
    +
    To restore account, create a new account with this email address. Or to permanently delete the mailbox, delete the directory on the machine.
    - -function users_remove(elem) { - var email = $(elem).parents('tr').attr('data-email'); - show_modal_confirm( - "Archive User", - $("

    Are you sure you want to archive " + email + "?

    The user's mailboxes will not be deleted (you can do that later), but the user will no longer be able to log into any services on this machine.

    "), - "Archive", - function() { - api( - "/mail/users/remove", - "POST", - { - email: email - }, - function(r) { - // Responses are multiple lines of pre-formatted text. - show_modal_error("Remove User", $("
    ").text(r));
    -          show_users();
    -        },
    -        function(r) {
    -          show_modal_error("Remove User", r);
    -        });
    -    });
    -}
    -
    -function mod_priv(elem, add_remove) {
    -  var email = $(elem).parents('tr').attr('data-email');
    -  var priv = $(elem).parents('td').find('.name').text();
    -
    -  // can't remove your own admin access
    -  if (priv == "admin" && add_remove == "remove" && api_credentials != null && email == api_credentials[0]) {
    -    show_modal_error("Modify Privileges", "You cannot remove the admin privilege from yourself.");
    -    return;
    -  }
    -
    -  var add_remove1 = add_remove.charAt(0).toUpperCase() + add_remove.substring(1);
    -  show_modal_confirm(
    -    "Modify Privileges",
    -    "Are you sure you want to " + add_remove + " the " + priv + " privilege for " + email + "?",
    -    add_remove1,
    -    function() {
    -      api(
    -        "/mail/users/privileges/" + add_remove,
    -        "POST",
    -        {
    -          email: email,
    -          privilege: priv
    -        },
    -        function(r) {
    -          show_users();
    -        });
    -    });
    -}
    -
    +
    \ No newline at end of file
    diff --git a/management/templates/web.html b/management/templates/web.html
    index 43db7f60..eb969a85 100644
    --- a/management/templates/web.html
    +++ b/management/templates/web.html
    @@ -1,102 +1,107 @@
    -
    +
    +
    +
    -

    Static Web Hosting

    +

    Static Web Hosting

    -

    This machine is serving a simple, static website at https://{{hostname}} and at all domain names that you set up an email user or alias for.

    +

    This machine is serving a simple, static website at https://{{hostname}} and at all domain names that you set up an email user or alias for.

    -

    Uploading web files

    +

    Uploading web files

    -

    You can replace the default website with your own HTML pages and other static files. This control panel won’t help you design a website, but once you have .html files you can upload it following these instructions:

    +

    You can replace the default website with your own HTML pages and other static files. This control panel won’t help you design a website, but once you have .html files you can upload it following these instructions:

    -
      -
    1. Ensure that any domains you are publishing a website for have no problems on the Status Checks page.
    2. +
        +
      1. Ensure that any domains you are publishing a website for have no problems on the Status Checks page.
      2. -
      3. On your personal computer, install an SSH file transfer program such as FileZilla or scp.
      4. +
      5. On your personal computer, install an SSH file transfer program such as FileZilla or scp.
      6. -
      7. Log in to this machine with the file transfer program. The server is {{hostname}}, the protocol is SSH or SFTP, and use the SSH login credentials that you used when you originally created this machine at your cloud host provider. This is not what you use to log in either for email or this control panel. Your SSH credentials probably involves a private key file.
      8. +
      9. Log in to this machine with the file transfer program. The server is {{hostname}}, the protocol is SSH or SFTP, and use the SSH login credentials that you used when you originally created this machine at your cloud host provider. This is not what you use to log in either for email or this control panel. Your SSH credentials probably involves a private key file.
      10. -
      11. Upload your .html or other files to the directory {{storage_root}}/www/default on this machine. They will appear directly and immediately on the web.
      12. +
      13. Upload your .html or other files to the directory {{storage_root}}/www/default on this machine. They will appear directly and immediately on the web.
      14. -
      15. The websites set up on this machine are listed in the table below with where to put the files for each website (if you have customized that, see next section).
      16. +
      17. The websites set up on this machine are listed in the table below with where to put the files for each website (if you have customized that, see next section).
      18. - - +
        + - - + + - - - -
        SiteDirectory for FilesSiteDirectory for Files
        + +
    -
  • If you want to have this box host a static website on a domain that is not listed in the table, create a dummy mail user or alias on the domain first.
  • +
  • If you want to have this box host a static website on a domain that is not listed in the table, create a dummy mail user or alias on the domain first.
  • - + -

    Different sites for different domains

    +

    Different sites for different domains

    -

    Create one of the directories shown in the table below to create a space for different files for one of the websites.

    +

    Create one of the directories shown in the table below to create a space for different files for one of the websites.

    -

    After you create one of these directories, click to restart the box’s web server so that it sees the new website file location.

    +

    After you create one of these directories, click to restart the box’s web server so that it sees the new website file location.

    - - - +
    + + - - - - -
    Site Create Directory
    + + + + + +
    +
    - + function do_web_update() { + api( + "/web/update", + "POST", + { + }, + function(data) { + if (data == "") + data = "Nothing changed."; + else + data = $("
    ").text(data);
    +          show_modal_error("Web Update", data, function() { show_web() });
    +        });
    +    }
    +    
    +
    +
    \ No newline at end of file