enterprise-demo.userify.com Open in urlscan Pro
5.161.186.103  Public Scan

URL: https://enterprise-demo.userify.com/
Submission: On July 27 via automatic, source certstream-suspicious — Scanned from DE

Form analysis 19 forms found in the DOM

<form class="login_form panel" autocomplete="on">
  <h2 style="margin-bottom: .5em;">
    <a href="https://userify.com">Login
                  <img class="logo" style="float:right" src="/userify-logo_2016-darkblue-blue-no-tagline_no-cloud-curve.svg" alt="logo"></a>
    <!--
                      <img class="logo" style="float:right" src="/userify-logo_2016-darkblue-blue-no-tagline_no-cloud-curve.svg" alt=logo></a>
                  -->
  </h2>
  <input type="text" class="precache_username_field form-control" name="username" placeholder="Username" required="true" xautofocus="">
  <input type="password" class="form-control" name="password" placeholder="Password" required="true">
  <label style="display: none; font-weight: normal; margin-top:.4em;"><input type="checkbox" name="rememberme" xchecked=""> Stay Logged In</label>
  <button style="margin-top: 2.8rem;" class="btn btn-lg btn-success btn-block" data-ah-action="login" type="submit">Login</button>
  <div style="margin: 1.0rem auto;">
    <a class="link hidden_ldap" href="#" data-ah-action="display_forgot_password">Forgot Password (local)</a>
    <!-- not used for LDAP/AD feature: -->
    <!--
                  data-ah-action="data-ah-flip"
                  data-ah-flip="click:signup_form"
              -->
    <a class="link hidden_signup hidden_ldap" data-ah-action="display_signup_form" style="float:right" href="#">Sign Up (local)</a>
    <p style="margin-top:1rem;">Never log in on a machine that doesn't belong to you.</p>
  </div>
</form>

<form class="base_configuration_form">
  <br>
  <!--
                  <div class="bucket_settings_menu">

                      <h3 class="section-header">File System Settings</h3>

                      <p>Important: Ensure this directory is backed up on at least a
                      daily basis.  </p>

                      <table class="table table-bordered table-condensed table-striped">
                        <thead>
                          <tr>
                            <th>NAME</th>
                            <th class="hidden-xs hidden-sm">DESCRIPTION</th>
                            <th>VALUE</th>
                          </tr>
                        </thead>
                          <tbody><tr>
                              <td><b>Filesystem Path</b></td>
                              <td class="hidden-xs hidden-sm">Where to store all Userify data files</td>
                              <td>
                                  <input name="filesystem_path" class="hidden base_config_var"
                                  placeholder="/opt/userify-server/data/"
                                  value="/opt/userify-server/data/" >
                              </td>
                          </tr></tbody>
                      </table>

                  </div>
                  <br>
                  -->
  <input name="filesystem_path" class="hidden base_config_var" placeholder="/opt/userify-server/data/" value="/opt/userify-server/data/">
  <div class="server_admin_settings">
    <h3 class="section-header">Server Configuration Administrator</h3>
    <p> Please set the username and password for the account that will be used to manage this server. </p>
    <p> This is a special systems administrator account that exists outside of Userify itself and is only used to manage this server system configuration, such as cache and email settings. </p>
    <table class="table table-bordered table-condensed table-striped">
      <thead>
        <tr>
          <th>NAME</th>
          <th class="hidden-xs hidden-sm">DESCRIPTION</th>
          <th>VALUE</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><b>Username</b></td>
          <td class="hidden-xs hidden-sm">This server special administrator username</td>
          <td><input name="sa_username" class="base_config_var" placeholder="username" value="admin"></td>
        </tr>
      </tbody>
      <tbody>
        <tr>
          <td><b>Password</b></td>
          <td class="hidden-xs hidden-sm">This server special administrator password (displayed)</td>
          <td><input name="sa_password" class="base_config_var" placeholder="password"></td>
        </tr>
      </tbody>
    </table>
  </div>
  <br>
  <div class="base_config_stage2">
  </div>
  <br>
  <div class="text-center next_button">
    <button class="btn btn-success btn-block btn-lg" data-ah-action="test_settings" href="#">NEXT </button>
  </div>
</form>

<form class="base_configuration_form">
  <br>
  <div class="bucket_settings_menu">
    <h3 class="section-header">Bucket Settings</h3>
    <p> Don't forget to create the bucket and assign IAM permissions to this user. <b><a href="/example_s3_policy/" target="NEW">Example IAM
                      policy</a></b>.</p>
    <table class="table table-bordered table-condensed table-striped">
      <thead>
        <tr>
          <th>NAME</th>
          <th class="hidden-xs hidden-sm">DESCRIPTION</th>
          <th>VALUE</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><b>AWS Access Id </b></td>
          <td class="hidden-xs hidden-sm">The AWS access key to access S3 data (in any bucket).</td>
          <td><input name="access_id" class="base_config_var" placeholder="Access ID starts with AKIA...."></td>
        </tr>
      </tbody>
      <tbody>
        <tr>
          <td><b>AWS Secret Key </b></td>
          <td class="hidden-xs hidden-sm">The AWS secret key to access S3 data (in any bucket).</td>
          <td><input name="secret_key" class="base_config_var"></td>
        </tr>
      </tbody>
      <tbody>
        <tr>
          <td><b>Bucket Name </b></td>
          <td class="hidden-xs hidden-sm">The name of the S3 bucket where your <i>configuration</i> data will be stored. Don't forget to create it and set IAM permissions as mentioned above. This bucket name must not contain periods(.).</td>
          <!--
                              <td><input name="bucket_name"
                                  class="base_config_var"
                                  placeholder="yourcompany-userify-enterprise"></td>
                              -->
          <td><input name="bucket_name" class="base_config_var" placeholder="Bucket Name (create and grant perms above)"></td>
        </tr>
      </tbody>
      <tbody>
        <tr>
          <td><b>S3 Bucket Region</b></td>
          <td class="hidden-xs hidden-sm">The region of the S3 bucket where your <i>configuration</i> data will be stored. Make sure this is right.</td>
          <td>
            <select name="s3_region" class="base_config_var">
              <option selected="">US-Standard</option>
              <option>US-East-1</option>
              <option>US-West-1</option>
              <option>US-West-2</option>
              <option>EU-West-1</option>
              <option>EU-Central-1</option>
              <option>AP-SouthEast-1</option>
              <option>AP-SouthEast-2</option>
              <option>AP-NorthEast-1</option>
              <option>SA-East-1</option>
            </select>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
  <br>
  <div class="server_admin_settings">
    <h3 class="section-header">Server Configuration Administrator</h3>
    <p>This is a special systems administrator account that exists outside of Userify itself and is only used to manage this server system configuration, such as cache and email settings. </p>
    <table class="table table-bordered table-condensed table-striped">
      <thead>
        <tr>
          <th>NAME</th>
          <th class="hidden-xs hidden-sm">DESCRIPTION</th>
          <th>VALUE</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td><b>Username</b></td>
          <td class="hidden-xs hidden-sm">This server special administrator username</td>
          <td><input name="sa_username" class="base_config_var" placeholder="username"></td>
        </tr>
      </tbody>
      <tbody>
        <tr>
          <td><b>Password</b></td>
          <td class="hidden-xs hidden-sm">This server special administrator password (displayed)</td>
          <td><input name="sa_password" class="base_config_var" placeholder="password"></td>
        </tr>
      </tbody>
    </table>
  </div>
  <br>
  <div class="base_config_stage2">
  </div>
  <br>
  <div class="text-center next_button">
    <button class="btn btn-success btn-block btn-lg" data-ah-action="test_settings" href="#">NEXT </button>
  </div>
</form>

<form>
  <div class="col-md-12">
    <div class="container-fluid">
      <div class="row panel headerbar">
        <div class="col-xs-12 col-lg-8">
          <h1>
            <span class="company_name" data-update="name"></span> Settings
          </h1>
        </div>
        <div class="col-xs-12 col-lg-4 align-right">
          <button data-ah-action="add_project" class="add_project btn-sm btn btn-default">New Project</button>
        </div>
      </div>
    </div>
    <div class="panel">
      <h4>Upgrade</h4>
    </div>
  </div>
</form>

#

<form action="#">
  <div class="col-md-12">
    <div class="container-fluid">
      <h1 class="hidden" style="float: left; padding: .75rem 1rem 0 0">
      </h1>
      <!-- COMPANY TABS -->
      <ul class="nav nav-pills nav-justified">
        <li class="active " role="presentation">
          <a href="#company-home" aria-controls="#company-home" role="tab" data-toggle="tab">
              Company
            </a>
        </li>
        <li class="" role="presentation">
          <a href="#company-projects" aria-controls="#company-projects" role="tab" data-toggle="tab">
              Projects
            </a>
        </li>
        <li class="" role="presentation">
          <a href="#company-users" aria-controls="#company-users" role="tab" data-toggle="tab">
              Users
            </a>
        </li>
        <li class="company_admin_only" role="presentation">
          <a href="#company-settings" aria-controls="#company-settings" class="company_admin_only" role="tab" data-toggle="tab">
              Settings
            </a>
        </li>
      </ul>
      <!--
        <div class=hidden style="float: left;">
          <h1>
            <i data-ah-action="delete_company"
              class="company_admin_only fa fa-times-circle delete_company pull-right no-underline text-danger pointer"></i>
          </h1>
        </div>
        -->
      <div class="tab-content">
        <!-- COMPANY HOME -->
        <div role="tabpanel" class="active tab-pane" id="company-home">
          <br>
          <h1><span class="company_name" data-update="name"></span></h1>
          <br>
          <p><span class="company_notes" data-update="notes"></span></p>
        </div>
        <!-- PROJECTS -->
        <div role="tabpanel" class="tab-pane" id="company-projects">
          <h1>Projects <i data-ah-action="add_project" class="fa fa-plus-circle company_admin_only add_project pull-right text-success pointer"></i>
          </h1>
          <div class="company_module">
            <div class="company-projects"> No visible projects yet. Click <a href="#" class="company_admin_only add_project company_admin_only add_project text-success pointer" data-ah-action="add_project">
                  New Project
                  <i data-ah-action="add_project" class="fa fa-plus-circle" data-hasqtip="2" aria-describedby="qtip-2"></i>
                </a> to create one. </div>
          </div>
        </div>
        <!-- USERS -->
        <div role="tabpanel" class="tab-pane" id="company-users">
          <!-- class="invite_company_user pull-right btn-sm btn btn-success">
              <i class="fa fa-plus-circle"></i></button>
            -->
          <h1>Users <!--
              <i data-ah-action="invite_company_user"
                -->
            <i data-ah-action="invite_single_company_user" class="
                  xhide_on_enterprise
                  fa fa-plus-circle invite_company_user
                  company_admin_only pull-right text-success pointer">
              </i>
          </h1>
          <div class="user_module">
            <div class="company-users"> No users yet; click <button href="#" class="company_admin_only" data-ah-action="invite_company_user">Invite User</button> to invite someone. </div>
          </div>
        </div>
        <!-- SETTINGS -->
        <div role="tabpanel" class="company_admin_only tab-pane" id="company-settings">
          <!-- class="invite_company_user pull-right btn-sm btn btn-success">
              <i class="fa fa-plus-circle"></i></button>
            -->
          <div class="company-settings">
            <br>
            <table class="table table-striped table-responsive" data-fillup-filter="show:edition=all, hide:edition=cloud">
              <tbody>
                <tr>
                  <td valign="top">Name</td>
                  <td valign="top">
                    <span class="company_name" style="text-decoration: underline;" data-update="name"></span>
                  </td>
                </tr>
                <tr>
                  <td valign="top">Notes</td>
                  <td valign="top">
                    <span data-type="textarea" style="text-decoration: underline;" class="company_notes" data-update="notes"><span style="color: #aaa;">Notes</span> </span>
                  </td>
                </tr>
              </tbody>
            </table>
            <div class="billing_menu toggle_pane" data-fillup-filter="hide:edition=all, show:edition=cloud">
              <span class="active" data-ah-action="toggle_pane" data-toggle-followup="" data-toggle-source="billing-usage" data-toggle-pane="billing-pane"> Utilization </span>
              <span data-ah-action="toggle_pane" data-toggle-followup="" data-toggle-source="billing-update-card" data-toggle-pane="billing-pane"> Update Card </span>
            </div>
            <div class="billing-wrapper panel panel-default" data-fillup-filter="hide:edition=all, show:edition=cloud" data-setup-fn="setup_billing_settings">
              <div class="billing-usage billing-pane">
                <div class="panel-heading">
                  <h3 class="panel-title"> Utilization <span class="report-for-month-year"></span>
                  </h3>
                </div>
                <div class="panel-body">
                  <div class="report_totals"></div>
                  <div class="usage_display"></div>
                  <div class="date-selector">
                    <select name="month-select" class="form-control month-select" style="display:inline-block; width: auto;">
                      <option value="1">January</option>
                      <option value="2">February</option>
                      <option value="3">March</option>
                      <option value="4">April</option>
                      <option value="5">May</option>
                      <option value="6">June</option>
                      <option value="7">July</option>
                      <option value="8">August</option>
                      <option value="9">September</option>
                      <option value="10">October</option>
                      <option value="11">November</option>
                      <option value="12">December</option>
                    </select>
                    <select name="year-select" class="form-control year-select" style="display:inline-block; width: auto;">
                      <option value="2022" selected="">2022</option>
                      <option value="2021">2021</option>
                    </select> &nbsp; <button data-ah-action="display_company_usage" class="btn btn-large btn-success">Load</button>
                  </div>
                </div>
              </div>
              <div class="billing-update-card billing-pane hidden">
              </div>
            </div>
            <p>
              <a data-ah-action="delete_company" style="cursor:pointer" class="delete_company company_admin_only">Delete Company
                  <i class="hidden company_admin_only fa fa-times-circle
                     delete_company pull-right no-underline text-danger pointer"></i>

                </a>
            </p>
          </div>
        </div>
      </div>
      <div class="hidden row headerbar">
        <div class="col-xs-12">
          <div style="float: left;">
            <h1>
              <span class="company_name" data-update="name"></span>
            </h1>
            <p><span data-type="textarea" class="company_notes hidden-xs hidden-sm" data-update="notes"><span style="color: #ddd;">Notes</span> </span>
            </p>
          </div>
          <div style="float: right;">
            <button data-ah-action="enterprise_user_manager" class="hidden btn-sm btn btn-default visible-enterprise">Enterprise User Manager</button>
            <button data-ah-action="delete_company" class="hidden delete_company btn-sm btn btn-danger">Delete</button>
            <h1>
              <i data-ah-action="delete_company" class="company_admin_only fa fa-times-circle delete_company pull-right no-underline text-danger pointer"></i>
              <i data-ah-action="company_settings_menu" class="hidden fa fa-cog company_admin_only pull-right no-underline pointer text-info"></i>
            </h1>
            <button data-ah-action="company_settings" data-permission-required="manage_company" class="hidden btn-sm btn btn-default">Settings</button>
            <button data-ah-action="company" class="hidden btn-sm btn btn-default"> Projects</button>
            <button data-ah-flip="click:company_user_list,company_module" data-ah-action="manage_users" class="hidden manage_users btn-sm btn btn-default"> Users</button>
          </div>
        </div>
      </div>
      <!-- end row headerbar -->
    </div>
  </div>
</form>

<form>
  <div class="container-fluid" style="padding: 1rem 0 .5rem;">
    <div class="row">
      <div class="col-lg-3"></div>
      <div class="col-xs-12 col-lg-6">
        <button class="btn btn-success btn-block btn-lg" data-ah-action="update_main_config">Save Configuration and Restart Server <i class="fa fa-check"></i>
        </button>
        <br>
        <div class="error_msg"></div>
      </div>
    </div>
  </div>
  <div class="configuration-tab-panes tab-content">
    <div class="tab-pane fade in" id="welcome-configuration">
      <!-- INTRODUCTION TAB -->
      <h5> Welcome to Userify! </h5>
      <p class="whatyouneedtoknow"> What's next: configure your server and click save. This will restart your server with the new configuration. </p>
      <p>
        <b>PLEASE NOTE:</b> The user account you just logged in with is for this server configuration dashboard <i>only</i>. Company administrators do not have the ability to do server administration.
      </p>
      <p> Because of this, you will be prompted to create your first <i>company</i> administrator <b>after</b> configuration, and then that administrator will create companies and invite users (and possibly appoint additional administrators). </p>
      <p>
        <b>IMPORTANT:</b> Back up your entire /opt/userify-server directory, including the <tt>base_config</tt> file, at least daily. Don't forget about this. Even if you backup the data files, they are encrypted with strong crypto and are useless
        without the key stored in the <tt>base_config</tt> file.
      </p>
      <p class="hidden">Lost your encryption key? Don't worry - you can still recover it by logging in with SSH and accessing the /opt/userify-server/base_config.cfg file, which is a plain-text JSON file on your server. Data is very strongly
        encrypted, so if you lose this encryption key, you also permanently lose access to your data in S3 or the network filesystem. We recommend that you back up your base_config.cfg file and your S3 bucket (or network filesystem) for best results.
        Tip: you can move over to a completely new Userify server just by copying over that base_config and granting it access to the same S3 bucket or network filesystem that it was original created with, or just by providing the same encryption
        key. </p>
    </div>
    <div class="tab-pane fade in" id="registration-configuration">
      <a role="button" data-toggle="collapse" href="#registration-configuration-collapse" aria-expanded="false" aria-controls="registration-configuration-collapse">
        <h5>
            Registration
            <i class="fa fa-info-circle text-info fa-pull-right"></i>
        </h5>
    </a>
      <div class="collapse highlight section-info" id="registration-configuration-collapse">
        <p class="whatyouneedtoknow"> Register below for free priority support and security alerts. </p>
      </div>
      <div class="config-form-fields">
        <div class="config-form-intro">
          <h6>Company Name</h6> Your company's name
        </div>
        <div class="config-form-field">
          <input class="form-control" name="contact_company" placeholder="Your Company Name">
        </div>
        <div class="config-form-intro">
          <h6>Contact Name</h6> Your name
        </div>
        <div class="config-form-field">
          <input class="form-control" name="contact_name" placeholder="Your Name">
        </div>
        <div class="config-form-intro">
          <h6>Contact Email</h6> Your email
        </div>
        <div class="config-form-field">
          <input class="form-control" name="contact_email" placeholder="Your Email">
        </div>
        <div class="config-form-intro">
          <b>Comment</b><br>Do you have a question, comment, or feature request?<br>
          <textarea row="10" style="width:100%; height: 5em;" name="contact_comments" placeholder="Comment (optional)"></textarea>
        </div>
      </div>
    </div>
    <!-- Redis configuration form -->
    <div class="tab-pane fade in" id="redis-configuration">
      <a role="button" data-toggle="collapse" href="#redis-configuration-collapse" aria-expanded="false" aria-controls="redis-configuration-collapse">
        <h5>
            High Scalability and HA Settings
            <i class="fa fa-info-circle text-info fa-pull-right"></i>
        </h5>
    </a>
      <div class="collapse highlight section-info" id="redis-configuration-collapse">
        <p style="whatyouneedtoknow"><b>What you need to know about scalability:</b><br> Userify uses Redis for cache, shared state, and to synchronize across multiple nodes. Userify can handle hundreds of thousands of nodes with a suitable
          architecture. Although Redis is required for normal operation, the data in Redis can be lost or destroyed and Userify will recover critical data and configuration Just In Time from S3/disk. Architectural support is available from
          <a href="https://userify.com">userify.com</a> or <a href="mailto:support@userify.com">support@userify.com</a>. </p>
      </div>
      <div class="config-form-fields">
        <div class="config-form-intro">
          <h6>Redis Host</h6> The hostname for your Redis cache server.
        </div>
        <div class="config-form-field">
          <input class="form-control" name="redis_host" value="localhost">
        </div>
        <div class="config-form-intro">
          <h6>Redis Port</h6> The default is 6379.
        </div>
        <div class="config-form-field">
          <input class="form-control" name="redis_port" value="6379">
        </div>
        <div class="config-form-intro">
          <h6>Redis Passwd</h6> Redis password (required by some services)
        </div>
        <div class="config-form-field">
          <input class="form-control" type="password" name="redis_passwd" placeholder="default">
        </div>
        <div class="config-form-intro">
          <h6>Redis Db</h6> The number of the Redis database to use (usually 0).
        </div>
        <div class="config-form-field">
          <input class="form-control" name="redis_db" value="0">
        </div>
      </div>
    </div>
    <div class="tab-pane fade in" id="ldap-configuration">
      <a role="button" data-toggle="collapse" href="#ldap-configuration-collapse" aria-expanded="false" aria-controls="ldap-configuration-collapse">
        <h5>
            LDAP/Active Directory
            <i class="fa fa-info-circle text-info fa-pull-right"></i>
        </h5>
    </a>
      <div class="collapse highlight section-info" id="ldap-configuration-collapse">
        <p style="whatyouneedtoknow"><b>What you need to know about how Userify handles AD/LDAP:</b><br> Optionally, provide details of your Active Directory/LDAP server(s), or, to stop using AD/LDAP, blank the fields. Synchronization requires a
          non-administrative AD/LDAP user account. Click for <a target="_blank" href="https://userify.com/docs/enterprise/active-directory-and-ldap-configuration/">Additional Documentation</a>
        </p>
        <p> DN's are generally case insensitive, but USERNAME (if you choose to use it) is case sensitive and will be replaced by the user's provided username upon use. </p>
        <p>Active Directory configuration is OPTIONAL. You can use Userify without ever deploying AD/LDAP and users will be created locally. <!--
        Additionally, you can turn off AD/LDAP
        logins and synchronization at any time and all user accounts will continue to
        function normally.
        --> Also, Userify can still be used even if the AD/LDAP server temporarily goes offline. </p>
        <!--
        <p>
        Security Notes:<br>
        Userify is arguably far more secure and more modern in design than any
        AD/LDAP server and is designed to be used on the public internet:
        all passwords are strongly hashed with an
        computationally intensive password hashing function (bcrypt), all user data
        is encrypted with X25519 via NaCl even before cache,
        no LDAP or SQL injection layer exists, MFA is available for server logins,
        no secret data such as private keys is generated or stored (except for
        user passwords themselves), privilege isolation is practiced
        between API endpoints, and the server itself is hardened against common
        types of attacks.  Because the AD/LDAP server is the weakest link in
        the chain, Userify is most secure when used without AD/LDAP.
        </p>
        -->
        <p>Authentication and search filters can be difficult to create. PLEASE contact support@userify.com if you run into configuration difficulties.</p>
        <p>NOTE: The search filter is used to search for other users, such as when you are inviting a user or the Status Check user is checking the status (such as disabled or locked out) of a user to synchronize AD to Userify. The Login template is
          used exclusively to login (and is used also by the status check user to initially log in to the AD server.)</p>
        <p>Useful fields for Active Directory filters to key on are sAMAccountName, which is usually the normal username for that user (joe_smith), or the userPrincipalName (aka UPN): joe_smith@corp.example.com.</p>
        <p>ALL LOGINS must have email (generally 'mail') attributes enabled in order to send invitations.</p>
      </div>
      <div class="config-form-fields">
        <div class="config-form-explanation">
          <h6>AD/LDAP Host (required if using AD/LDAP)</h6> The hostname for your directory server(s).<br> This should be a full resolvable hostname, IP address, or ldap[s]://hostname[:port] (not a WINS or NetBIOS name). SSL (ldaps) recommended.
        </div>
        <div class="config-form-field">
          <input class="form-control" name="ldap_host" value="" placeholder="ldaps://10.11.12.13">
        </div>
        <div class="config-form-explanation">
          <h6>AD/LDAP Status Check Username (required if using AD/LDAP)</h6> A non-administrative username with read-only privileges. This must be an actual username and password on the AD/LDAP server. It is used to check other user accounts for
          deleted/disabled/locked out status. (Disabled/locked out flags only have a pre-defined meaning for AD.)
        </div>
        <div class="config-form-field">
          <input class="form-control" name="ldap_email" value="" placeholder="username">
        </div>
        <div class="config-form-explanation">
          <h6>AD/LDAP Status Check Password (required if using AD/LDAP)</h6> Password for the non-admin user.
        </div>
        <div class="config-form-field">
          <input class="form-control" type="password" name="ldap_password" value="" placeholder="password">
        </div>
        <div class="config-form-explanation">
          <h6>AD/LDAP Base DN (required if using AD/LDAP)</h6>
          <b>Active Directory</b>: use the AD Realm such as <i>DC=corp,DC=example,DC=com</i>. <br>
          <b>LDAP</b>: use a full DN such as: <i>ou=users,dc=example,dc=com</i>
        </div>
        <div class="config-form-field">
          <input class="form-control" name="ldap_realm" value="" placeholder="DC=corp,DC=example,DC=com or ou=people,dc=example,dc=com">
        </div>
        <div class="config-form-explanation">
          <h6>AD/LDAP Username Login Template (required only if using LDAP)</h6>
          <b>Active Directory</b>: leave this blank. Windows notes: see help above. <br>
          <b>LDAP</b>: If using a field other than 'cn' for username, provide a full DN for processing logins such as:<br>
          <i>uid=USERNAME,ou=users,dc=example,dc=com</i> or a Windows-style UPN such as USERNAME@corp.example.com.
        </div>
        <div class="config-form-field">
          <input class="form-control" name="ldap_username_template" value="" placeholder="USERNAME@corp.example.com">
        </div>
        <div class="config-form-explanation">
          <h6>LDAP Search Filter (required only if using LDAP)</h6>
          <b>Active Directory:</b> leave unchanged. (defaults to <i>
            (&amp;(objectClass=user)(sAMAccountName=USERNAME))
            </i>). <br>
          <b>LDAP Examples:</b>
          <br>
          <i>
            (&amp;(objectClass=inetOrgPerson)(cn=USERNAME))
            </i>
          <br>
          <i>
            (&amp;(CN=USERNAME)(!(objectClass=contact)))
            </i>
        </div>
        <div class="config-form-field">
          <input class="form-control" name="ldap_search_filter" value="(&amp;(objectClass=user)(sAMAccountName=USERNAME))" placeholder="(&amp;(objectClass=user)(sAMAccountName=USERNAME))">
        </div>
        <div class="config-form-explanation">
          <h6>LDAP Mail Attribute Name (optional)</h6> The name of the attribute containing the user's email address<br> Both Active Directory and LDAP (inetOrgPerson) call this 'mail', while some Active Directory schemas prefer userPrincipalName
          instead. <input class="form-control" name="ldap_attr_mail" value="mail" placeholder="mail">
        </div>
        <!--

        <div class="config-form-explanation">
            <h6>LDAP Full Name Attribute Name</h6>
                <h6>Optional.</h6>
                    The name of the attribute containing the user's full or last name.<br>
                    Active Directory: name. inetOrgPerson: givenName.


                <input  class="form-control" name=ldap_attr_name value="name"

                    placeholder="name">

        </div>


        <div class="config-form-explanation">
            <h6>LDAP TLS Require Certification</h6>
                    Whether to require signed certificates when connecting
                    to the LDAP or Active Directory.


                <input style="font-size: 1.5rem;"
                    type=checkbox name=ldap_opt_x_tls_require_cert checked>

        </div>

        <div class="config-form-explanation">
            <h6>LDAP TLS</h6>


                <input style="font-size: 1.5rem;"
                    type=checkbox name=ldap_opt_x_tls_never checked>

        </div>

        -->
      </div>
    </div>
    <div class="tab-pane fade in" id="mail-configuration">
      <a role="button" data-toggle="collapse" href="#mail-configuration-collapse" aria-expanded="false" aria-controls="mail-configuration-collapse">
        <h5>
            Mail Settings
            <i class="fa fa-info-circle text-info fa-pull-right"></i>
        </h5>
        <h6>Required</h6>
        <p>
        <b>SMTP (mail sending) must be configured for Userify to work properly.</b>
        AWS and other cloud providers restrict or throttle outbound SMTP
        on port 25, so appending :587 to the SMTP server name
        is frequently required.
        </p>
        </a>
      <p><a role="button" data-toggle="collapse" href="#mail-configuration-collapse" aria-expanded="false" aria-controls="mail-configuration-collapse">
        The mail server name shown is correct for Gmail/Google Apps.
        </a><a style="color: orange" target="_blank" href="https://userify.com/docs/configuring-userify-for-amazon-ses/">Click here for step-by-step directions to set up Userify with Amazon SES.</a>
      </p>
      <div class="collapse highlight section-info" id="mail-configuration-collapse">
        <p style="whatyouneedtoknow"><b>What you need to know about how Userify sends email:</b><br> Userify uses standard SMTP to send email to invite users and notify them of changes to their account. TLS is <b>required.</b> Port 587 is recommended
          as many providers, including Amazon, throttle or block outgoing port 25. </p>
      </div>
      <div class="config-form-fields">
        <div class="config-form-intro">
          <h6>SMTP server</h6>
        </div>
        <div class="config-form-field">
          <input class="form-control" placeholder="smtp-relay.gmail.com:587" name="mail_server">
        </div>
        <div class="config-form-field">
          <h6>Disable TLS </h6>
          <p> Disables TLS connections to the mail server. (warning: <b>insecure</b>) <input class="pull-right" type="checkbox" name="mail_ssl_disabled" style="width:2.5rem !important;">
          </p>
        </div>
        <div class="config-form-intro">
          <h6>SMTP username</h6>
        </div>
        <div class="config-form-field">
          <input class="form-control" placeholder="username to send email as" name="mail_username">
        </div>
        <div class="config-form-intro">
          <h6>SMTP password</h6>
        </div>
        <div class="config-form-field">
          <input class="form-control" type="password" placeholder="password" name="mail_password">
        </div>
        <div class="config-form-intro">
          <h6>SMTP From email address</h6>
        </div>
        <div class="config-form-field">
          <input class="form-control" placeholder="FROM email address (example: userify@yourcompany.com)" name="mail_from_addr">
        </div>
        <div class="config-form-intro">
          <h6>Subject Key Word</h6> Useful for mail filters, almost every notification email begins with this word in square brackets. [Userify]
        </div>
        <div class="config-form-field">
          <input class="form-control" placeholder="Userify" value="Userify" name="mail_notification_subject_word">
        </div>
      </div>
    </div>
    <div class="active tab-pane fade in" id="hostname-configuration">
      <h5> Hostname</h5>
      <div class="config-form-fields">
        <p> Please configure the hostname that you would like to use with this Userify server. </p>
        <div class="config-form-field">
          <input class="form-control" name="web_server_url" old-name="hostname" placeholder="userify.yourcompany.com">
        </div>
      </div>
    </div>
    <div class="tab-pane fade in" id="newtls-configuration">
      <h5>TLS Certificate Configuration</h5>
      <div class="config-form-fields">
        <div class="section-info" style="border:none;background-color:rgba(0,0,0,.02)">
          <div class="config-form-field">
            <label>
              <input type="radio" class="" name="tls_option" value="lets-encrypt"> Use Let's Encrypt </label>
          </div>
          <p> Most secure: use <a target="_blank" href="https://letsencrypt.org/">Let's Encrypt</a> to receive a free TLS (formerly SSL) certificate for the hostname of your choice. By choosing this, you certify that you agree to <a href="https://letsencrypt.org/repository/" target="_blank">
                Let's Encrypt's terms of service</a>. Please ensure before proceeding that: </p>
          <li> A DNS "A" record exists (such as userify.yourcompany.com) that is pointing at this server's IP. </li>
          <li> This server's IP is externally accessible on ports 80 and 443. <label> Email for Let's Encrypt to let you know about certificate renewals/issues:<br>
              <input class="form-control" name="tls_email" placeholder="email@example.com">
            </label>
          </li>
        </div>
        <div class="section-info" style="border:none;background-color:rgba(0,0,0,.02)">
          <div class="config-form-field">
            <label>
              <input type="radio" class="" name="tls_option" value="custom"> Custom SSL/TLS Configuration </label>
          </div>
          <textarea class="form-control tls_key" rows="1" name="tls_key" placeholder="# click to expand

-----BEGIN PRIVATE KEY-----
Paste the TLS private key here
-----END PRIVATE KEY-----
            "></textarea>
          <textarea class="form-control" rows="20" name="tls_crt" placeholder="
-----BEGIN CERTIFICATE-----
Paste all of certificates, including the issued certificate and the CA
chained certificates with a blank line between each.
Usually, you'll have more than one.
-----END CERTIFICATE-----"></textarea>
        </div>
        <div class="hidden section-info" style="border:none;background-color:rgba(0,0,0,.02)">
          <div class="config-form-field">
            <label class="">
              <input type="radio" class="" name="tls_option" value="self-signed"> Self-Signed </label>
          </div>
          <p>Cannot be used to deploy servers. </p>
        </div>
      </div>
    </div>
    <div class="tab-pane fade in" id="urls-configuration">
      <a role="button" data-toggle="collapse" href="#urls-configuration-collapse" aria-expanded="false" aria-controls="urls-configuration-collapse">
        <h5>
            URLs and Server Settings
            <i class="fa fa-info-circle text-info fa-pull-right"></i>
        </h5>
    </a>
      <div class="collapse highlight section-info" id="urls-configuration-collapse">
        <p style="whatyouneedtoknow"><b>What you need to know about how server settings:</b><br> Be sure to adjust the URL (and your DNS services) to point at the hostname that matches the name in the URL below. Otherwise, these settings are probably
          correct at their guessed defaults.</p>
        <p>In most cases, the hostname should stay as the external IP address or Elastic IP address, but if you are deploying this server inside a VPC, you may wish to use the internal IP address of the server for the shim installation server and the
          shim configuration server. </p>
      </div>
      <div class="config-form-fields">
        <div class="config-form-intro">
          <h6>Web Server Url</h6>
          <b>The full URL</b> to this server. This is pre-pended to password reset and invitation codes in emails, as well prepended to the shim installation path.
        </div>
        <div class="config-form-field">
          <input class="form-control" name="old-web_server_url" placeholder="https://dashboard.userify.com/">
        </div>
        <div class="config-form-intro">
          <h6>Shim Installer Server</h6> The <b>hostname (IP or name)</b> of the API server that the shim <b>installer.sh</b> calls back to. This should almost always be the same as this server name or IP address.
        </div>
        <div class="config-form-field">
          <input class="form-control" placeholder="shim_api_server" name="shim_installer_server">
        </div>
        <div class="config-form-intro">
          <h6>Shim Configuration Server</h6> The <b>hostname (IP or name)</b> of the shim server that the shim calls into. This should almost always be the same as the shim_installer_server setting.
        </div>
        <div class="config-form-field">
          <input class="form-control" placeholder="shim_shim_server" name="shim_configuration_server">
        </div>
        <!-- coming soon
        -->
        <!--
        <div class="config-form-intro">
            <h6>Shim Delay</h6>
            How many seconds should each server wait before polling again?
            This will increase load on the Userify server, but will ensure faster changes.
            No more than sixty seconds is recommended.
        </div>

        <div class="config-form-field">
            <input  class="form-control" value=5 name="shim_delay">
        </div>


        <div class="config-form-intro">
            <h6>Loghost</h6>
            Userify can send all syslog updates to a loghost server (IP or hostname)
            in standard RFC 3164 format. It's ok to leave this blank.
        </div>

        <div class="config-form-field">
            <input  class="form-control" placeholder="loghost" name="loghost">
        </div>
        -->
      </div>
    </div>
    <div class="tab-pane fade in" id="certificates-configuration">
      <a role="button" data-toggle="collapse" href="#certificates-configuration-collapse" aria-expanded="false" aria-controls="certificates-configuration-collapse">
        <h5>
            Server Certificates
            <i class="fa fa-info-circle text-info fa-pull-right"></i>
        </h5>
    </a>
      <p>Configure your TLS certificates here (optional) if you'd like the server to start on port 443. (Otherwise, the server will start on port 8120 and can be proxied with NGINX or another TLS/SSL server such as caddy2.) </p>
      <div class="collapse highlight section-info" id="certificates-configuration-collapse">
        <p style="whatyouneedtoknow"><b>What you need to know about how server certificates:</b><br> Userify uses TLS certificates to encrypt the connection between you and the server, and between client nodes and Userify. Although you can use
          self-signed certificates, it's much more secure to install a proper CA-signed certificates and will prevent MITM attacks between your server nodes and the Userify server.</p>
        <p> Installing certificates below <b>will automatically trigger
        all newly configured client nodes to start checking certificates.</b> Important to understand: if you ever want to revert back to self-signed, you will have to change the configuration file on all client nodes back to self-signed in order to
          make them stop checking certificates, so keep this certificate current. </p>
        <p> If this server is unable to start with your pasted key and certificate, the self-signed certificate will be used instead until you can correct the problem. It is very important that your hostname on the Server Settings tab match the
          hostname that is set in the certificate, or you'll get a mismatch error and shim clients will not be able to connect. (This is especially true for the shim_configuration_server and shim_installer_server setting.) Any previously configured
          shims may require hostname adjustments if they are configured to use a different name. </p>
        <p> For the certificate chain, paste the certificate chain that you received from your Certificate Authority with your certificate last. Place at least one blank line between certificates. Certificates (provided by your CA) begin with
          -----BEGIN CERTIFICATE----- and end with -----END CERTIFICATE-----, and the secret key (from the server that originally generated the CSR) similarly begin with -----BEGIN PRIVATE KEY----- and end with -----END PRIVATE KEY-----. </p>
        <p><b>Don't have separate certificates but have a combined .pem file?</b><br> Paste the entire PEM file into either of the fields below and leave the other blank.</p>
        <p>
          <b>You should have only one secret key and multiple certificates. Separate them by blank lines.
        Optionally include # comments on their own lines. These fields are
        optional and the server will used self-signed certificates if you
        leave them blank.
        </b>
        </p>
        <p> Questions? Contact support@userify.com with your account ID. </p>
      </div>
      <div class="form-group">
        <div class="config-form-field">
          <p>
            <input class="form-control" type="checkbox" name="disable_certificate_verification" style="width:2.5rem !important; float:right; margin-left: 1rem;"> Checking this box will cause your server deployment recipes to not verify your server
            certificates. <b>Warning: this is insecure.</b>
          </p>
        </div>
        <p>You can paste an SSL/TLS secret key and certificate below so that you can securely access your server; for example, https://userify.example.com. You should do this <i>before</i> deploying servers, so that they are pointing at the correct,
          secured hostname. It's recommended that you do not paste a key if accessing this configuration dashboard via an insecure (http instead of http) connection. You can instead update the base_config.yaml file directly. </p>
        <hr>
        <label>SSL/TLS Secret Key</label>
        <!-- changed names to not interfere with the Userify 4 textarea vars -->
        <textarea class="form-control tls_key" rows="1" name="x--tls_key" placeholder="-----BEGIN PRIVATE KEY-----
Did you purchase a signed key for this server or have a wildcart cert?
Paste the TLS private key here, or leave blank to use self-signed.
-----END PRIVATE KEY-----
"></textarea>
        <label>TLS Certificates.</label>
        <textarea class="form-control" rows="20" name="x--tls_crt" placeholder="-----BEGIN CERTIFICATE-----
Paste all of your certificates (the ones
that the Certificate Authority provided to you)
here, or leave blank to continue using self-signed.
Leave blank lines between each certificate.
-----END CERTIFICATE-----

-----BEGIN CERTIFICATE-----
Usually, you'll have more than one.
-----END CERTIFICATE-----
"></textarea>
      </div>
    </div>
    <div class="tab-pane fade in" id="license-configuration">
      <a role="button" data-toggle="collapse" href="#license-configuration-collapse" aria-expanded="false" aria-controls="license-configuration-collapse">
        <h5>
            Userify License Key
            <i class="fa fa-info-circle text-info fa-pull-right"></i>
        </h5>
    </a>
      <div class="collapse highlight section-info" id="license-configuration-collapse">
        <p class="whatyouneedtoknow"> If your License expires or is blank, you'll be placed on a limited free license. Questions? Contact support@userify.com. </p>
      </div>
      <div class="form-group">
        <label>License Key</label>
        <p>Please provide this license key to <a href="mailto:support@userify.com?subject=Userify License Key">Userify Support</a> and your license will be automatically provisioned.</p>
        <input class="form-control" name="license_key" placeholder="License Key">
      </div>
      <!--
    <div class="form-group">
        <label>License Code</label>
        <textarea class="hidden form-control" rows=20 name=license_code placeholder="License Code"></textarea>
    </div>
    -->
    </div>
    <div class="tab-pane fade in" id="sa_password-configuration">
      <a role="button" data-toggle="collapse" href="#sa_password-configuration-collapse" aria-expanded="false" aria-controls="sa_password-configuration-collapse">
        <h5>
            Reset Server Admin Password
            <i class="fa fa-info-circle text-info fa-pull-right"></i>
        </h5>
    </a>
      <div class="collapse highlight section-info" id="sa_password-configuration-collapse">
        <p class="whatyouneedtoknow"> Leave this blank to keep your current password. Password will not be displayed. It can also be reset by pasting a new unhashed password into the sa_password field in /opt/userify-server/base_config.cfg on the
          server. </p>
      </div>
      <div class="form-group">
        <label>New Server Admin Password</label>
        <input class="form-control" type="password" name="sa_password" placeholder="New Password">
      </div>
    </div>
  </div>
</form>

<form class="server_logo">
  <div class="file_upload panel">
    <div class="container-fluid">
      <div class="row">
        <div class="col-sm-12">
          <label> Update Server Logo. <span class="small"><i>&nbsp;Recommended: 180x50 PNG</i></span>
            <!--span class=uploaded_photo></span-->
          </label>
        </div>
      </div>
      <div class="row">
        <div class="col-xs-9">
          <input type="file" name="upload" class="avatar_upload form-control">
          <br clear="both">
        </div>
        <div class="col-xs-1">
          <button data-ah-action="form_server_logo_upload" class="tiny btn btn-success start_upload">Upload</button>
          <br clear="both">
        </div>
      </div>
      <br clear="both">
    </div>
  </div>
</form>

<form>
  <div class="form-group" style="text-align:center">
    <!-- FIXME TODO -->
    <input class="form-control" name="sa_username" placeholder="Username">
    <br>
    <input class="form-control" type="password" name="sa_password" placeholder="Password">
    <br>
    <button class="btn btn-success btn-block" type="submit" data-ah-action="main_config_login">Login</button>
  </div>
</form>

<form>
  <div class="eum_wrapper">
    <h1>Enterprise User Manager</h1>
    <h2 data-update="name"></h2>
    <div class="project_info">
      <h3 data-update="name"></h3>
    </div>
    <ul class="nav nav-tabs">
      <li class="active"><a class="btn btn-success" href="#tab1" data-toggle="tab">Usergroups</a></li>
      <li><a class="btn btn-success" href="#tab2" data-toggle="tab">Roles</a></li>
      <li><a class="btn btn-success" href="#tab3" data-toggle="tab">Grants</a></li>
    </ul>
    <div class="tab-content"><!-- Tab-Content -->
      <!-- USER GROUPS -->
      <div class="active tab-pane" id="tab1">
        <div class="select_wrapper">
          <span class="select-label"> User Group </span>
          <select data-select-company-fn="list_company_usergroups" data-option-company-fn="list_users_in_a_company_usergroup" data-select-project-fn="list_project_usergroups" data-option-project-fn="list_users_in_a_project_usergroup"
            data-option-company-activate-fn="add_user_id_to_company_usergroup" data-option-company-deactivate-fn="remove_user_id_from_company_usergroup" data-option-project-activate-fn="add_user_id_to_project_usergroup"
            data-option-project-deactivate-fn="remove_user_id_from_project_usergroup" data-ah-action="eum_menu" class="form-control">
          </select>
          <button class="btn btn-default btn-small"> New.. </button>
          <br>
        </div>
        <p>User groups generally have plural names.</p>
        <span class="menu-label">Users</span>
        <div class="itemlist">Please select a user group above to add or remove users.</div>
      </div>
      <!-- ROLES -->
      <div class="tab-pane" id="tab2">
        <div class="select_wrapper">
          <span class="select-label"> Role </span>
          <select data-select-company-fn="list_company_roles" data-option-company-fn="list_permissions_in_a_company_role" data-select-project-fn="list_project_roles" data-option-project-fn="list_permissions_in_a_project_role"
            data-ah-action="eum_menu" class="form-control">
          </select>
          <button class="btn btn-default btn-small"> New.. </button>
          <br>
        </div>
        <p>Note: built-in roles cannot be edited. Roles generally have singular names.</p>
        <span class="menu-label">Permissions</span>
        <div class="itemlist">Please select a role above to adjust its permissions.</div>
      </div>
      <!-- GRANTS -->
      <div class="tab-pane" id="tab3">
        <div class="select_wrapper">
          <span class="select-label"> Role </span>
          <select data-select-company-fn="list_company_roles" data-option-company-fn="list_usergroups_in_a_company_role" data-select-project-fn="list_project_roles" data-option-project-fn="list_usergroups_in_a_project_role" data-ah-action="eum_menu"
            class="form-control">
          </select>
          <button class="btn btn-default btn-small"> New.. </button>
          <br>
        </div>
        <p>Grants link a role to one or more usergroups.</p>
        <span class="menu-label">User Groups</span>
        <div class="itemlist">Please select a role above to adjust its usergroups.</div>
      </div>
      <!-- End Tab-Content -->
    </div>
  </div>
</form>

<form class="login_form" autocomplete="on" style="width: 400px; top: 0; padding: 2rem; background: rgba(0,0,0,.8); box-shadow: 1px 1px 3px;">
  <input type="text" class="precache_username_field form-control" name="username" placeholder="Username" required="true" xautofocus="">
  <br>
  <input type="password" class="form-control" name="password" placeholder="Password" required="true">
  <button style="margin-top: 2.8rem;" class="btn btn-lg btn-success btn-block" data-ah-action="login" type="submit">Login</button>
  <div style="margin: 1.0rem auto;">
    <!-- not used for LDAP/AD feature: -->
    <a class="link hidden_ldap" href="#" data-ah-action="display_forgot_password">Forgot Password (local)</a>
    <a class="link hidden_signup hidden_ldap" data-ah-action="data-ah-flip" data-ah-flip="click:signup" style="float:right" href="#">Sign Up (local)</a>
    <p style="margin-top:1rem;">Never log in on a machine that doesn't belong to you.</p>
  </div>
</form>

<form class="login_form panel" autocomplete="on">
  <h2 style="margin-bottom: .5em;">
    <a href="https://userify.com">Login
                  <img class="logo" style="float:right" src="/userify-logo_2016-darkblue-blue-no-tagline_no-cloud-curve.svg" alt="logo"></a>
    <!--
                      <img class="logo" style="float:right" src="/userify-logo_2016-darkblue-blue-no-tagline_no-cloud-curve.svg" alt=logo></a>
                  -->
  </h2>
  <input type="text" class="precache_username_field form-control" name="username" placeholder="Username" required="true" xautofocus="">
  <input type="password" class="form-control" name="password" placeholder="Password" required="true">
  <label style="display: none; font-weight: normal; margin-top:.4em;"><input type="checkbox" name="rememberme" xchecked=""> Stay Logged In</label>
  <button style="margin-top: 2.8rem;" class="btn btn-lg btn-success btn-block" data-ah-action="login" type="submit">Login</button>
  <div style="margin: 1.0rem auto;">
    <a class="link hidden_ldap" href="#" data-ah-action="display_forgot_password">Forgot Password (local)</a>
    <!-- not used for LDAP/AD feature: -->
    <!--
                  data-ah-action="data-ah-flip"
                  data-ah-flip="click:signup_form"
              -->
    <a class="link hidden_signup hidden_ldap" data-ah-action="display_signup_form" style="float:right" href="#">Sign Up (local)</a>
    <p style="margin-top:1rem;">Never log in on a machine that doesn't belong to you.</p>
  </div>
</form>

<form>
  <div class="modal_panel logofied">
    <div class="error_msg"></div>
    <div class="container-fluid">
      <div class="row">
        <div class="col-md-12">
          <h1 class="section-header">BASE CONFIGURATION</h1>
          <br>
          <div class="navbar">
            <div class="navbar-inner">
              <div class="container">
                <ul class="nav nav-tabs">
                  <li><a class="active" href="#tab1" data-toggle="tab">Introduction</a></li>
                  <li><a href="#tab2" data-toggle="tab">Crypto Keys</a></li>
                  <li><a href="#tab4" data-toggle="tab">First User Account</a></li>
                  <li><a href="#tab5" data-toggle="tab">Configuration</a></li>
                  <li><a href="#tab3" data-toggle="tab">AWS Configuration</a></li>
                </ul>
              </div>
            </div>
          </div>
          <div class="tab-content">
            <div class="active tab-pane" id="tab1">
              <p> Welcome to Userify! </p>
              <p> To prevent compromise of data stored in an S3 bucket, Userify encrypts all data except for usernames before storing to S3. The key used for this encryption <a target="NEW" href="https://en.wikipedia.org/wiki/Salsa20#ChaCha20_adoption">
                                  (Salsa 20, a replacement for RC4)</a> is automatically generated but <b>must be backed up.</b>
              </p>
              <p>
                <mark>WARNING!</mark><b>&nbsp;
                                      <i>
                                          Your encryption key
                                          is irrecoverable,
                                          rendering all Userify data lost.
                                      </i></b>
              </p>
              <p> Back up /opt/userify-server after this server initialization is complete. </p>
            </div>
            <div class="tab-pane" id="tab2">
              <table class="table table-bordered table-condensed table-striped">
                <thead>
                  <tr>
                    <th>NAME</th>
                    <th>DESCRIPTION</th>
                    <th>VALUE</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td><b>Secret Key </b></td>
                    <td>Automatically generated secret key.</td>
                    <td><input name="crypto_key" disabled="" class="base_config_var" value="008ad9a"></td>
                  </tr>
                </tbody>
              </table>
            </div>
            <div class="active tab-pane" id="tab3">
              <p> Using the crypto key on the prior page, Leave blank to not store encrypted configuration in S3. <button data-ah-action="upload_new_s3_configuration" class="pull-right btn btn-success btn-lg">Finish
                  <i class="fa fa-check"></i></button><br><br>
              </p>
            </div>
            <div class="tab-pane" id="tab4">
              <p>Create a user account for the first user. This user will have Manage Server permissions. Please ensure this account has a valid email for notifications and resets. </p>
              <table class="table table-bordered table-condensed table-striped">
                <thead>
                  <tr>
                    <th>NAME</th>
                    <th>DESCRIPTION</th>
                    <th>VALUE</th>
                  </tr>
                </thead>
                <tbody>
                  <tr>
                    <td><b>Email</b></td>
                    <td>Your Email address. (Not currently editable after install.)</td>
                    <td><input class="base_config_var" name="email" placeholder="your@email.com"></td>
                  </tr>
                </tbody>
                <tbody>
                  <tr>
                    <td><b>Your (Linux) Username</b></td>
                    <td>This can be the same as email if desired (if your Linux supports this). (Not currently editable after install.)</td>
                    <td><input class="base_config_var" name="username" placeholder="username"></td>
                  </tr>
                </tbody>
                <tbody>
                  <tr>
                    <td><b>Password</b></td>
                    <td>This is the password you will use to log into the web console.</td>
                    <td><input class="base_config_var" name="password" type="password"></td>
                  </tr>
                </tbody>
              </table>
            </div>
            <div class="tab-pane" id="tab5">
              <div class="row">
                <div class="col-md-12">
                  <div>
                    <p>Please note: In Userify AWS, <b>you are responsible</b> for backing up your own disk configuration. Please back up the entire <code>/opt/userify-server/</code> directory.</p>
                    <p><mark>DO NOT CLICK FINISH</mark> until you have the previous configuration pages correct, and any necessary S3 buckets created and permissions assigned.</p>
                    <!--button class="btn btn-default btn-lg pull-right"
                                                  data-ah-action="create_new_s3_configuration">
                                                  Continue to Main Configuration
                                              </button> -->
                    <br>
                  </div>
                </div>
              </div>
            </div>
          </div>
          <br>
          <div class="pull-right">
            <button type="button" class="btn-outline btn btn-default btn-sm" data-ah-action="display_login_form">Skip to Login &nbsp; &nbsp; <span aria-hidden="true" class="fa fa-check"></span>
            </button> &nbsp; <button type="button" class="btn-outline btn btn-default btn-sm" data-ah-action="data-ah-flip" data-ah-flip="click:base_configuration_enterprise"> Main Menu &nbsp; &nbsp; <span aria-hidden="true"
                class="fa fa-check"></span>
            </button>
          </div>
        </div>
      </div>
    </div>
  </div>
</form>

<form class="profile" role="form">
  <div class="container-fluid">
    <div class="row">
      <!--div class="col-lg-3 col-md-4 hidden-xs hidden-sm">
                  <br>
                  <div class='myavatar right'></div>
              </div-->
      <div class="col-lg-12">
        <h1>Profile <!--span style="float:right;" data-ah-action="logout" type="submit" class="display-xs display-sm hidden-md hidden-lg btn-small btn btn-danger"><i class="fa fa-log-out"></i></span-->
        </h1>
        <!--p>Upload your photo at <a target=blank href="https://gravatar.com/">Gravatar</a>.-->
        <div class="form-group">
          <label>Name</label>
          <input type="text" class="form-control" name="name" placeholder="Name">
        </div>
        <div class="form-group hidden_ldap">
          <label>Email</label>
          <input type="text" class="email form-control" name="email" xdisabled="">
        </div>
        <div class="form-group hidden_ldap">
          <label>Linux Username</label>
          <!-- password must be changed if username is changed, since it's salted with the username! -->
          <input type="text" class="form-control" name="username">
        </div>
        <!--
                  <div class="form-group">
                      <label>Theme</label>
                      <select class="form-control" name="userify_theme">
                              <option>Default</option>
                              <option>Night</option>
                              <option>Day</option>
                      </select>
                  </div>
                  -->
        <div class="form-group">
          <label>Preferred Shell</label>
          <div class="fancy-form fancy-form-select">
            <select class="form-control" name="preferred_shell">
              <optgroup label="Recommended Shells">
                <option data-content="<span class='label label-success'>/bin/bash</span>">/bin/bash</option>
                <option data-content="<span class='label label-primary'>/bin/sh</span>">/bin/sh</option>
              </optgroup>
              <optgroup label="  Automation and Backup Accounts  ">
                <option data-content="<span class='label label-warning'>/sbin/nologin</span>">/sbin/nologin</option>
                <option data-content="<span class='label label-danger'>/bin/false</span>">/bin/false</option>
              </optgroup>
            </select>
          </div>
        </div>
      </div>
      <div class="col-lg-12">
        <label>SSH Public Key Import from <span style="text-decoration: none;" class="link" data-ah-action="import_github_key">GitHub <i class="fa fa-github-alt"></i><!--input type="text" name="github_username"--></span> or <span
            style="text-decoration: none;" class="link" data-ah-action="import_gitlab_key">GitLab <i class="fa fa-gitlab"></i></span>.
          <a style="font-weight: bold; text-decoration: none; margin-left: 0rem;" class="link" href="https://userify.com/docs/generating-ssh-keys-on-ec2/" target="NEW">Need help? <i class="fa fa-question-circle"></i></a>
        </label>
        <textarea style="height: 14em; font-size: .7em" name="ssh_public_key" placeholder="SSH Public Key" class="form-control"></textarea>
        <p>More than one? Just paste them in with a blank line between! <!--span class=link data-ah-action="documentation">Need Help?</span--></p>
      </div>
    </div>
    <div class="row">
      <div class="col-lg-12">
        <span data-ah-action="change_password" type="submit" class="btn btn-default">Change Password</span>
        <span data-ah-action="setup_mfa" type="submit" class="btn btn-default">Setup MFA</span>
        <button data-ah-action="form_profile_update" type="submit" class="btn btn-success waitanimate"> Save </button>
        <span>
          <i style="display:none" class="saved_success text-success fa fa-check-circle-o"></i>
          <i style="display:none" class="saved_error text-danger fa fa-times-circle"></i>
        </span>
      </div>
    </div>
  </div>
</form>

<form class="profile_image">
  <div class="container-fluid">
    <div class="row">
      <div class="file_upload panel">
        <div class="container-fluid">
          <div class="row">
            <div class="col-sm-12">
              <label> Update photo. <span class="small"><i>&nbsp;Max 32 MB JPEG.</i></span>
                <!--span class=uploaded_photo></span-->
              </label>
            </div>
          </div>
          <div class="row">
            <div class="col-xs-9">
              <input type="file" name="upload" class="avatar_upload form-control">
              <br clear="both">
            </div>
            <div class="col-xs-1">
              <button data-ah-action="form_profile_image_upload" class="tiny btn btn-success start_upload">Upload</button>
              <br clear="both">
            </div>
          </div>
          <br clear="both">
        </div>
      </div>
    </div>
  </div>
</form>

<form>
  <div class="col-md-12">
    <h1>Project <span class="project_name" data-update="name"></span></h1>
    <div class="project-data well well-sm">
      <p><b>Premium Feature</b> Grant and revoke individual user rights on this project. </p>
    </div>
    <div class="project_perms">
      <div id="tag-info" class="input-append">
        <input>
        <button class="btn" type="button">Add <i class="icon-plus"></i></button>
      </div>
      <ul class="tag-cloud-main">
        <li class="tag-cloud tag-cloud-warning">blog</li>
        <li class="tag-cloud"> footer</li>
        <li class="tag-cloud tag-cloud-success"> user&nbsp;interface</li>
        <li class="tag-cloud tag-cloud-danger"> user</li>
        <li class="tag-cloud tag-cloud-info"> post</li>
        <li class="tag-cloud tag-cloud-inverse"> edit</li>
      </ul>
    </div>
  </div>
</form>

<form>
  <div class="col-md-12">
    <div class="container-fluid">
      <div class="row headerbar" style="margin-bottom: 0;">
        <div class="col-xs-12">
          <div style="float: left;">
            <h1 style="margin-bottom:0">
              <span class="project_name" data-update="name"></span>
            </h1>
            <p><span data-type="textarea" class="project_notes hidden-xs hidden-sm" data-update="notes"><span style="color: #ddd;">Notes</span> </span>
            </p>
          </div>
          <div style="float: right;">
            <h1>
              <!--
                          <button data-ah-action="enterprise_user_manager" class="btn-sm btn btn-default visible-enterprise">Enterprise User Manager</button>
                          -->
              <a data-ah-action="delete_project">
                              <i data-ah-action="delete_project" class="fa fa-times-circle company_admin_only delete_project pull-right no-underline text-danger pointer"></i>
                          </a>
              <!--
                          <button data-ah-action="delete_project" class="delete_project btn-sm btn btn-danger">Delete</button>
                      <button data-ah-action="add_project" class="add_project btn-sm btn btn-default">New Server Group</button>
                      -->
              <i data-ah-action="add_project" class="fa fa-plus-circle add_project company_admin_only pull-right no-underline text-success pointer"></i>
            </h1>
            <br>
            <div class="project_server_count">
            </div>
            <!--

                      Missing company ID to pass to server and not really relevant here anyway

                      <button data-ah-action="invite_company_user"
                          data-permission-required="manage_company_invites"
                          class="invite_company_user btn-sm btn btn-success">Invite User</button>
                      -->
          </div>
        </div>
      </div>
      <div class="project_matrix no-padding">
        <div class="user_cells_column">
          <div class="user_column_top_cell">
            <div style="
                              overflow: hidden;
                              background: rgba(0,0,0,.05);
                              height: 100%;
                              width: 100%;
                              position: relative; padding: 0;">
              <input class="user_search" style="
                                  background: transparent;
                                  z-index: 500;
                                  font-size: 2rem;
                                  padding: 10px;
                                  margin: 0;
                                  border-bottom: none;
                                  ">
              <span style="
                                  position: absolute;
                                  z-index: 0;
                                  right: 10px;
                                  top: 13px;">
                <i class="fa fa-search text-success"></i>
              </span>
            </div>
            <div class="hidden"> &nbsp; <i data-ah-action="shrink_tds" class="shrink-td pointer fa fa-chevron-left hidden-xs hidden-sm"></i>
            </div>
          </div>
        </div>
        <div class="project_matrix_table">
        </div>
      </div>
      <div class="project_management">
        <div class="projects">
        </div>
        <div class="project_management_menu">
        </div>
        <div class="project_management_main"> There aren't any server groups created yet... would you like to create one?<br>
          <button data-ah-action="add_project" class="add_project btn-sm btn btn-default"> Create Server Group</button>
        </div>
      </div>
      <div class="hidden-lg" style="margin-right: ">
      </div>
      <!--
          <div style="margin-bottom: 300px;">
          </div>
          -->
    </div>
  </div>
</form>

<form class="signup signup_form panel" autocomplete="on">
  <h2>Signup <a href="https://userify.com"><img class="logo" style="float:right" src="/userify-logo_2016-darkblue-blue-no-tagline_no-cloud-curve.svg"></a></h2>
  <input type="text" class="form-control" name="username" placeholder="Username" required="true" autofocus="">
  <input type="password" class="form-control" name="password" placeholder="Password" required="true">
  <input type="email" class="form-control hidden_ldap" name="email" placeholder="Email" required="true">
  <button style="margin-top: 2.8rem;" class="signup-button btn btn-lg btn-success btn-block" data-ah-action="signup" type="submit">Create Account</button>
  <div style="margin-top: 1.0rem;">
    <a class="link" data-ah-action="data-ah-flip" data-ah-flip="click:login_form" href="#">I already have a login.</a>
    <br>
    <div class="version_info">
      <span class="app_full_name"></span>
    </div>
  </div>
  <div class="progress hidden">
    <div class="active progress-bar progress-bar-info progress-bar-striped" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"
      style="width: 100%; color: white; text-align:center; padding-top: 3px; padding-bottom: 3px; height: auto;"><b>One moment please..</b>
    </div>
  </div>
</form>

<form>
  <div class="col-xs-12 col-md-8">
    <div class="container-fluid">
      <div class="row panel headerbar" style="margin-bottom: 0;">
        <h1> Invite Users </h1>
        <p> Please paste a comma-delimited, space-separated, or newline-separated list of users to invite to Userify. There is no limit except for your computer's memory to the number of users you can bulk invite. Please do not include names or any
          other data with the email addresses. </p>
        <textarea name="bulk_invite" style="color: #444; margin: 2em 0; height: 25em" class="form-control bulk_invite_input" placeholder="user1@example.com"></textarea>
        <button class="btn btn-success" data-ah-action="bulk_invite">Invite Users</button>
        <p></p>
      </div>
    </div>
  </div>
  <div class="col-xs-12 col-md-4" style="padding: 0 2em">
    <div class="container-fluid">
      <div class="row panel">
        <h1>Tips</h1>
        <div class="alert alert-info">
          <h5 style="color:white;">Userify Enterprise</h5>
          <p> If LDAP/Active Directory is configured, usernames may be used instead of emails. (Users must still accept invitations.) </p>
        </div>
        <div class="alert alert-success">
          <b>
                          Inviting does not automatically grant <u>any</u> rights or
                          privileges to the invited users except for the ability to
                          see the company name and the list of users in the company.</b>
        </div>
        <p> <b>Project names and server groups will be invisible </b> until invited users are granted access. </p>
        <p>
          <b>You will not see them in your user list</b> until they create an account and accept your invitation.
        </p>
        <p>
          <b>
                  If users already exist in Userify (perhaps as part of another company),</b> they'll be instantly added to your company and you can grant access to them immediately.
        </p>
      </div>
    </div>
  </div>
</form>

<form>
  <div class="error_msg"></div>
  <br>
  <p>Over the next several screens, you'll set up your new Userify server. </p>
  <!--using S3 or a local filesystem, or load an
                      existing configuration from S3.</p>-->
  <p>If you have any trouble, please don't hesitate to email us at <a href="support@userify.com">support@userify.com.</a>
  </p>
  <br>
  <br>
  <div class="btn-group btn-group-lg btn-group-justified" role="group">
    <!--
                      <div class="btn-group" role="group">
                          <button type="button" class="btn btn-default "
                              data-ah-action="data-ah-flip"
                              data-ah-flip="click:base_config_s3_bucket"
                              href="#">S3 Configuration
                          </button>
                      </div>
                      -->
    <div class="btn-group" role="group">
      <button type="button" class="btn btn-default" style="border-left: 1px solid rgba(0,0,0,.2);" data-ah-action="data-ah-flip" data-ah-flip="click:base_config_filesystem" href="#">Next </button>
    </div>
  </div>
</form>

Text Content

Thank you for checking out Cloud SSH Key and sudo management !

Cloud SSH Key and sudo management uses Javascript, but unfortunately it is
disabled in your browser.

Click here to learn how to enable Javascript.

SERVER CONFIGURATION 


LOGIN

Stay Logged In Login
Forgot Password (local) Sign Up (local)

Never log in on a machine that doesn't belong to you.



USERIFY ENTERPRISE 6.1.1-2979 20

+ New UX coming soon!

The Userify dashboard is getting a facelift soon!


Userify Enterprise 6.1.1-2979
Copyright © Userify Corporation


SETTINGS CONFIRMATION

STORE THIS INFORMATION IN A SAFE PLACE!
Userify uses strong cryptography for storage of data in AWS. If you lose the
keys on this page, your entire Userify system will be left in an irrecoverable
encrypted state. All backups will be completely useless without this
information. Store an offsite backup copy with your company security or risk
management team.


CONFIDENTIAL & MISSION CRITICAL

THE ENCRYPTION KEY WITHIN THIS WIZARD CANNOT BE RECOVERED. PLEASE RECORD IN A
SAFE PLACE.

NAME DESCRIPTION VALUE File System Path The local filesystem where all data
files will be stored.

AWS Access Id The AWS access key to access S3 data (in any bucket).

Bucket Name The name of the S3 bucket where your configuration data will be
stored.

S3 Bucket Region The region of the S3 bucket where your configuration data will
be stored. Make sure this is right.

Server Administrator Username This server special administrator username
NOTE: This is NOT the same as your company administrator user account that you
will create your first company with, which you will create by signing up as a
regular user account. This account is only used to access the administrative
control panel for the Userify Enterprise/Pro server itself.

Crypto Key: DO NOT LOSE THIS KEY Encryption Key


Proceed to Configuration    


BASE CONFIGURATION


RETURN





SERVER CONFIGURATION ADMINISTRATOR

Please set the username and password for the account that will be used to manage
this server.

This is a special systems administrator account that exists outside of Userify
itself and is only used to manage this server system configuration, such as
cache and email settings.

NAME DESCRIPTION VALUE Username This server special administrator username
Password This server special administrator password (displayed)




NEXT


EXISTING CONFIGURATION FOUND

Please provide the key to unlock this configuration.

Note: If you are seeing this error without an existing config, then you may not
have configured your IAM policy properly.

NAME DESCRIPTION VALUE Crypto key Original Encryption Key


BASE CONFIGURATION (S3) RETURN TO FS SELECTION





BUCKET SETTINGS

Don't forget to create the bucket and assign IAM permissions to this user.
Example IAM policy.

NAME DESCRIPTION VALUE AWS Access Id The AWS access key to access S3 data (in
any bucket). AWS Secret Key The AWS secret key to access S3 data (in any
bucket). Bucket Name The name of the S3 bucket where your configuration data
will be stored. Don't forget to create it and set IAM permissions as mentioned
above. This bucket name must not contain periods(.). S3 Bucket Region The region
of the S3 bucket where your configuration data will be stored. Make sure this is
right. US-Standard US-East-1 US-West-1 US-West-2 EU-West-1 EU-Central-1
AP-SouthEast-1 AP-SouthEast-2 AP-NorthEast-1 SA-East-1



SERVER CONFIGURATION ADMINISTRATOR

This is a special systems administrator account that exists outside of Userify
itself and is only used to manage this server system configuration, such as
cache and email settings.

NAME DESCRIPTION VALUE Username This server special administrator username
Password This server special administrator password (displayed)




NEXT

Upgrade to Pro



No projects yet; click New Project to create one.


SETTINGS

New Project

UPGRADE

No users yet; Invite another user.

 * Company
 * Projects
 * Users
 * Settings











PROJECTS

No visible projects yet. Click New Project to create one.


USERS

No users yet; click Invite User to invite someone.



Name Notes Notes

Utilization Update Card


UTILIZATION

January February March April May June July August September October November
December 2022 2021   Load


Delete Company

Notes

Enterprise User Manager Delete




Settings Projects Users
Toggle navigation
 * Welcome
 * Registration
 * High Scalability
 * Configuration
 * TLS/SSL Certificates
 * Reset Password
   
 * Hostname
 * TLS Certificates
 * Mail
 * Active Directory & LDAP
 * License
   

Save Configuration and Restart Server



WELCOME TO USERIFY!

What's next: configure your server and click save. This will restart your server
with the new configuration.

PLEASE NOTE: The user account you just logged in with is for this server
configuration dashboard only. Company administrators do not have the ability to
do server administration.

Because of this, you will be prompted to create your first company administrator
after configuration, and then that administrator will create companies and
invite users (and possibly appoint additional administrators).

IMPORTANT: Back up your entire /opt/userify-server directory, including the
base_config file, at least daily. Don't forget about this. Even if you backup
the data files, they are encrypted with strong crypto and are useless without
the key stored in the base_config file.

Lost your encryption key? Don't worry - you can still recover it by logging in
with SSH and accessing the /opt/userify-server/base_config.cfg file, which is a
plain-text JSON file on your server. Data is very strongly encrypted, so if you
lose this encryption key, you also permanently lose access to your data in S3 or
the network filesystem. We recommend that you back up your base_config.cfg file
and your S3 bucket (or network filesystem) for best results. Tip: you can move
over to a completely new Userify server just by copying over that base_config
and granting it access to the same S3 bucket or network filesystem that it was
original created with, or just by providing the same encryption key.

REGISTRATION

Register below for free priority support and security alerts.

COMPANY NAME

Your company's name


CONTACT NAME

Your name


CONTACT EMAIL

Your email

Comment
Do you have a question, comment, or feature request?


HIGH SCALABILITY AND HA SETTINGS

What you need to know about scalability:
Userify uses Redis for cache, shared state, and to synchronize across multiple
nodes. Userify can handle hundreds of thousands of nodes with a suitable
architecture. Although Redis is required for normal operation, the data in Redis
can be lost or destroyed and Userify will recover critical data and
configuration Just In Time from S3/disk. Architectural support is available from
userify.com or support@userify.com.

REDIS HOST

The hostname for your Redis cache server.


REDIS PORT

The default is 6379.


REDIS PASSWD

Redis password (required by some services)


REDIS DB

The number of the Redis database to use (usually 0).


LDAP/ACTIVE DIRECTORY

What you need to know about how Userify handles AD/LDAP:
Optionally, provide details of your Active Directory/LDAP server(s), or, to stop
using AD/LDAP, blank the fields. Synchronization requires a non-administrative
AD/LDAP user account. Click for Additional Documentation

DN's are generally case insensitive, but USERNAME (if you choose to use it) is
case sensitive and will be replaced by the user's provided username upon use.

Active Directory configuration is OPTIONAL. You can use Userify without ever
deploying AD/LDAP and users will be created locally. Also, Userify can still be
used even if the AD/LDAP server temporarily goes offline.

Authentication and search filters can be difficult to create. PLEASE contact
support@userify.com if you run into configuration difficulties.

NOTE: The search filter is used to search for other users, such as when you are
inviting a user or the Status Check user is checking the status (such as
disabled or locked out) of a user to synchronize AD to Userify. The Login
template is used exclusively to login (and is used also by the status check user
to initially log in to the AD server.)

Useful fields for Active Directory filters to key on are sAMAccountName, which
is usually the normal username for that user (joe_smith), or the
userPrincipalName (aka UPN): joe_smith@corp.example.com.

ALL LOGINS must have email (generally 'mail') attributes enabled in order to
send invitations.

AD/LDAP HOST (REQUIRED IF USING AD/LDAP)

The hostname for your directory server(s).
This should be a full resolvable hostname, IP address, or
ldap[s]://hostname[:port] (not a WINS or NetBIOS name). SSL (ldaps) recommended.


AD/LDAP STATUS CHECK USERNAME (REQUIRED IF USING AD/LDAP)

A non-administrative username with read-only privileges. This must be an actual
username and password on the AD/LDAP server. It is used to check other user
accounts for deleted/disabled/locked out status. (Disabled/locked out flags only
have a pre-defined meaning for AD.)


AD/LDAP STATUS CHECK PASSWORD (REQUIRED IF USING AD/LDAP)

Password for the non-admin user.


AD/LDAP BASE DN (REQUIRED IF USING AD/LDAP)

Active Directory: use the AD Realm such as DC=corp,DC=example,DC=com.
LDAP: use a full DN such as: ou=users,dc=example,dc=com


AD/LDAP USERNAME LOGIN TEMPLATE (REQUIRED ONLY IF USING LDAP)

Active Directory: leave this blank. Windows notes: see help above.
LDAP: If using a field other than 'cn' for username, provide a full DN for
processing logins such as:
uid=USERNAME,ou=users,dc=example,dc=com or a Windows-style UPN such as
USERNAME@corp.example.com.


LDAP SEARCH FILTER (REQUIRED ONLY IF USING LDAP)

Active Directory: leave unchanged. (defaults to
(&(objectClass=user)(sAMAccountName=USERNAME)) ).
LDAP Examples:
(&(objectClass=inetOrgPerson)(cn=USERNAME))
(&(CN=USERNAME)(!(objectClass=contact)))


LDAP MAIL ATTRIBUTE NAME (OPTIONAL)

The name of the attribute containing the user's email address
Both Active Directory and LDAP (inetOrgPerson) call this 'mail', while some
Active Directory schemas prefer userPrincipalName instead.

MAIL SETTINGS

REQUIRED

SMTP (mail sending) must be configured for Userify to work properly. AWS and
other cloud providers restrict or throttle outbound SMTP on port 25, so
appending :587 to the SMTP server name is frequently required.

The mail server name shown is correct for Gmail/Google Apps. Click here for
step-by-step directions to set up Userify with Amazon SES.

What you need to know about how Userify sends email:
Userify uses standard SMTP to send email to invite users and notify them of
changes to their account. TLS is required. Port 587 is recommended as many
providers, including Amazon, throttle or block outgoing port 25.

SMTP SERVER



DISABLE TLS

Disables TLS connections to the mail server. (warning: insecure)

SMTP USERNAME



SMTP PASSWORD



SMTP FROM EMAIL ADDRESS



SUBJECT KEY WORD

Useful for mail filters, almost every notification email begins with this word
in square brackets. [Userify]


HOSTNAME

Please configure the hostname that you would like to use with this Userify
server.



TLS CERTIFICATE CONFIGURATION

Use Let's Encrypt

Most secure: use Let's Encrypt to receive a free TLS (formerly SSL) certificate
for the hostname of your choice. By choosing this, you certify that you agree to
Let's Encrypt's terms of service. Please ensure before proceeding that:

A DNS "A" record exists (such as userify.yourcompany.com) that is pointing at
this server's IP. This server's IP is externally accessible on ports 80 and 443.
Email for Let's Encrypt to let you know about certificate renewals/issues:

Custom SSL/TLS Configuration
Self-Signed

Cannot be used to deploy servers.

URLS AND SERVER SETTINGS

What you need to know about how server settings:
Be sure to adjust the URL (and your DNS services) to point at the hostname that
matches the name in the URL below. Otherwise, these settings are probably
correct at their guessed defaults.

In most cases, the hostname should stay as the external IP address or Elastic IP
address, but if you are deploying this server inside a VPC, you may wish to use
the internal IP address of the server for the shim installation server and the
shim configuration server.

WEB SERVER URL

The full URL to this server. This is pre-pended to password reset and invitation
codes in emails, as well prepended to the shim installation path.


SHIM INSTALLER SERVER

The hostname (IP or name) of the API server that the shim installer.sh calls
back to. This should almost always be the same as this server name or IP
address.


SHIM CONFIGURATION SERVER

The hostname (IP or name) of the shim server that the shim calls into. This
should almost always be the same as the shim_installer_server setting.


SERVER CERTIFICATES

Configure your TLS certificates here (optional) if you'd like the server to
start on port 443. (Otherwise, the server will start on port 8120 and can be
proxied with NGINX or another TLS/SSL server such as caddy2.)

What you need to know about how server certificates:
Userify uses TLS certificates to encrypt the connection between you and the
server, and between client nodes and Userify. Although you can use self-signed
certificates, it's much more secure to install a proper CA-signed certificates
and will prevent MITM attacks between your server nodes and the Userify server.

Installing certificates below will automatically trigger all newly configured
client nodes to start checking certificates. Important to understand: if you
ever want to revert back to self-signed, you will have to change the
configuration file on all client nodes back to self-signed in order to make them
stop checking certificates, so keep this certificate current.

If this server is unable to start with your pasted key and certificate, the
self-signed certificate will be used instead until you can correct the problem.
It is very important that your hostname on the Server Settings tab match the
hostname that is set in the certificate, or you'll get a mismatch error and shim
clients will not be able to connect. (This is especially true for the
shim_configuration_server and shim_installer_server setting.) Any previously
configured shims may require hostname adjustments if they are configured to use
a different name.

For the certificate chain, paste the certificate chain that you received from
your Certificate Authority with your certificate last. Place at least one blank
line between certificates. Certificates (provided by your CA) begin with
-----BEGIN CERTIFICATE----- and end with -----END CERTIFICATE-----, and the
secret key (from the server that originally generated the CSR) similarly begin
with -----BEGIN PRIVATE KEY----- and end with -----END PRIVATE KEY-----.

Don't have separate certificates but have a combined .pem file?
Paste the entire PEM file into either of the fields below and leave the other
blank.

You should have only one secret key and multiple certificates. Separate them by
blank lines. Optionally include # comments on their own lines. These fields are
optional and the server will used self-signed certificates if you leave them
blank.

Questions? Contact support@userify.com with your account ID.

Checking this box will cause your server deployment recipes to not verify your
server certificates. Warning: this is insecure.

You can paste an SSL/TLS secret key and certificate below so that you can
securely access your server; for example, https://userify.example.com. You
should do this before deploying servers, so that they are pointing at the
correct, secured hostname. It's recommended that you do not paste a key if
accessing this configuration dashboard via an insecure (http instead of http)
connection. You can instead update the base_config.yaml file directly.

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

SSL/TLS Secret Key TLS Certificates.

USERIFY LICENSE KEY

If your License expires or is blank, you'll be placed on a limited free license.
Questions? Contact support@userify.com.

License Key

Please provide this license key to Userify Support and your license will be
automatically provisioned.

RESET SERVER ADMIN PASSWORD

Leave this blank to keep your current password. Password will not be displayed.
It can also be reset by pasting a new unhashed password into the sa_password
field in /opt/userify-server/base_config.cfg on the server.

New Server Admin Password


USERIFY ENTERPRISE CO-BRANDING

Replace the Userify logo with your corporate logo. Max size: half MB.


Update Server Logo.  Recommended: 180x50 PNG


Upload




Copyright © 2022 Userify Corporation


SERVER CONFIGURATION


LOGIN







Login
Unauthorized access prohibited. Return to primary login.


ENTERPRISE USER MANAGER







 * Usergroups
 * Roles
 * Grants

User Group New..


User groups generally have plural names.

Users
Please select a user group above to add or remove users.
Role New..


Note: built-in roles cannot be edited. Roles generally have singular names.

Permissions
Please select a role above to adjust its permissions.
Role New..


Grants link a role to one or more usergroups.

User Groups
Please select a role above to adjust its usergroups.


Login
Forgot Password (local) Sign Up (local)

Never log in on a machine that doesn't belong to you.

SERVER CONFIGURATION 


LOGIN

Stay Logged In Login
Forgot Password (local) Sign Up (local)

Never log in on a machine that doesn't belong to you.



USERIFY ENTERPRISE 6.1.1-2979 20

+ New UX coming soon!

The Userify dashboard is getting a facelift soon!

Userify Enterprise 6.1.1-2979
Copyright © Userify Corporation




BASE CONFIGURATION


 * Introduction
 * Crypto Keys
 * First User Account
 * Configuration
 * AWS Configuration

Welcome to Userify!

To prevent compromise of data stored in an S3 bucket, Userify encrypts all data
except for usernames before storing to S3. The key used for this encryption
(Salsa 20, a replacement for RC4) is automatically generated but must be backed
up.

WARNING!  Your encryption key is irrecoverable, rendering all Userify data lost.

Back up /opt/userify-server after this server initialization is complete.

NAME DESCRIPTION VALUE Secret Key Automatically generated secret key.

Using the crypto key on the prior page, Leave blank to not store encrypted
configuration in S3. Finish



Create a user account for the first user. This user will have Manage Server
permissions. Please ensure this account has a valid email for notifications and
resets.

NAME DESCRIPTION VALUE Email Your Email address. (Not currently editable after
install.) Your (Linux) Username This can be the same as email if desired (if
your Linux supports this). (Not currently editable after install.) Password This
is the password you will use to log into the web console.

Please note: In Userify AWS, you are responsible for backing up your own disk
configuration. Please back up the entire /opt/userify-server/ directory.

DO NOT CLICK FINISH until you have the previous configuration pages correct, and
any necessary S3 buckets created and permissions assigned.



Skip to Login       Main Menu    
ENTERPRISE
ENTERPRISE
Projects
 * 20
 * 
 * 

One moment please..
Loading..


SERVER CONFIGURATION 


MULTI-FACTOR AUTHENTICATION WHAT IS THIS?

Two factor, also known as multi-factor authentication (2FA/MFA), require you to
provide two or more factors to identify yourself when logging in, such as
something you know, like a password or PIN, and something you have, such as your
phone which is running a timed cryptographic key generator that generates a
one-time password (OTP), which is usually in the form of a 6 digit number that
expires every 30 seconds. Each time you log in at a new device, you will be
prompted for a new code. MFA is no substitute for a weak password!

What you need to know:
Adding two factor authentication will require you to enter a code from your
phone whenever you log in from a new device. Currently, you will need a smart
phone to enable two-factor authentication running an authenticator, such as
Google Authenticator or Red Hat's FreeOTP Authenticator (recommended: Android/
IOS ). We recommend FreeOTP as it does not rely on third-party QR scanners. Auth
apps that synchronize codes are by definition less secure than ones that have
codes wipe. Just open the app and use the built-in scanner on the displayed QR
code.

Tip: print this page (and QR code) and save somewhere safe. You should also save
the backup code, which will let you in if you damage or lose your phone.

BACKUP CODE

Display Backup Code





Cancel Disabling MFA revokes codes on all devices.

 

none user root


PROFILE

Name
Email
Linux Username
Preferred Shell
/bin/bash /bin/sh /sbin/nologin /bin/false
SSH Public Key Import from GitHub or GitLab . Need help?

More than one? Just paste them in with a blank line between!

Change Password Setup MFA Save
Update photo.  Max 32 MB JPEG.


Upload



Enable Logins (DISABLED)
Delete Server Group
Enterprise User Manager
Rename Server Group
Revoke Server Group API Keys

View Servers
Create Company 


PROJECT

Premium Feature Grant and revoke individual user rights on this project.

Add
 * blog
 * footer
 * user interface
 * user
 * post
 * edit

Notes






 

There aren't any server groups created yet... would you like to create one?
Create Server Group

SERVER CONFIGURATION 



 WHAT'S USERIFY?

Securely update your key across all servers in seconds.

Admins can assign you new server privileges in two clicks.

View your privileges and IP addresses of your servers.

USERIFY ENTERPRISE 6.1.1-2979 20

+ New UX coming soon!

The Userify dashboard is getting a facelift soon!

This is a secured installation. Unauthorized access is prohibited.


SIGNUP

Create Account
I already have a login.


One moment please..


INVITE USERS

Please paste a comma-delimited, space-separated, or newline-separated list of
users to invite to Userify. There is no limit except for your computer's memory
to the number of users you can bulk invite. Please do not include names or any
other data with the email addresses.

Invite Users




TIPS

USERIFY ENTERPRISE

If LDAP/Active Directory is configured, usernames may be used instead of emails.
(Users must still accept invitations.)

Inviting does not automatically grant any rights or privileges to the invited
users except for the ability to see the company name and the list of users in
the company.

Project names and server groups will be invisible until invited users are
granted access.

You will not see them in your user list until they create an account and accept
your invitation.

If users already exist in Userify (perhaps as part of another company), they'll
be instantly added to your company and you can grant access to them immediately.



/bin/sh /bin/sh
/bin/bash /bin/bash
sh bash /bin/sh /bin/bash
/bin/sh /bin/sh
/bin/bash /bin/bash


INSTANCE ID SECURITY CHECK






TO VALIDATE YOUR ACCESS TO THIS INSTANCE, PLEASE PROVIDE THIS INSTANCE'S ID FROM
THE WEB DASHBOARD.

For AWS EC2 instances, the simplest way to do this is to check in the EC2
dashboard, but you can also check this instance ID by SSH'ing into the instance
and typing:

curl -s http://169.254.169.254/latest/meta-data/instance-id




Check Instance ID


WELCOME TO USERIFY!







Over the next several screens, you'll set up your new Userify server.

If you have any trouble, please don't hesitate to email us at
support@userify.com.



Next