google-nomulus/java/google/registry/ui/soy/registrar/Console.soy
guyben 61a5cf307e Add "Admin" tab to the registrar console
This tab will set the "allowedTlds", but might have other functionality in the
future.

It is based on (branches from) the security-settings tab, because I'm copying the functionality of the "whitelisted IPs" to the "allowed TLDs": they are both lists of "arbitrary" strings that you can remove from and add to.

There are a lot of moving parts in this CL, because of how all the different elements need to interact, and how intertwined they are (for example, we need to disable the admin-settings view for non admins both in the soy and in the JS code)

It's really time to refactor the console given all we've learned... :/

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=220373443
2018-11-12 14:51:40 -05:00

343 lines
12 KiB
Text

// Copyright 2017 The Nomulus Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
{namespace registry.soy.registrar.console}
/**
* Main registrar page. We use a single page architecture (SPA) so content is
* filled in dynamically into reg-app element via JS rendering of Component.soy
* and other templates within it.
*/
{template .main}
{@param xsrfToken: string} /** Security token. */
{@param clientId: string} /** Registrar client identifier. */
{@param allClientIds: list<string>} /** All registrar client identifiers for the user. */
{@param isAdmin: bool}
{@param username: string} /** Arbitrary username to display. */
{@param logoutUrl: string} /** Generated URL for logging out of Google. */
{@param productName: string} /** Name to display for this software product. */
{@param integrationEmail: string}
{@param supportEmail: string}
{@param announcementsEmail: string}
{@param supportPhoneNumber: string}
{@param technicalDocsUrl: string}
{call registry.soy.console.header}
{param app: 'registrar' /}
{param subtitle: 'Registrar Console' /}
{/call}
{call registry.soy.console.googlebar data="all" /}
<div id="reg-app">
<div id="reg-appbar" class="{css('kd-appbar')}"></div>
{call .navbar_ data="all" /}
<div id="reg-content-and-footer">
<div id="reg-content">
// Dynamic content goes here.
</div>
{call registry.soy.console.footer /}
</div>
</div>
{switch DEBUG}
{case google.registry.ui.ConsoleDebug.PRODUCTION}
<script src="/assets/js/registrar_bin.js"></script>
{case google.registry.ui.ConsoleDebug.DEBUG}
<script src="/assets/js/registrar_dbg.js"></script>
{case google.registry.ui.ConsoleDebug.RAW}
<script>var CLOSURE_NO_DEPS = true;</script>
<script src="/assets/sources/closure_library/closure/goog/base.js"></script>
<script src="/assets/sources/domain_registry/java/google/registry/ui/deps.js"></script>
<script>goog.require('registry.registrar.main');</script>
{/switch}
{if isNonnull(DEBUG)}
<script>
registry.registrar.main({$xsrfToken},
{$clientId},
{if $isAdmin}true{else}false{/if},
{$productName},
{$integrationEmail},
{$supportEmail},
{$announcementsEmail},
{$supportPhoneNumber},
{$technicalDocsUrl});
</script>
{/if}
{/template}
/** Sidebar nav. Ids on each elt for testing only. */
{template .navbar_ visibility="private"}
{@param clientId: string} /** Registrar client identifier. */
{@param allClientIds: list<string>}
{@param isAdmin: bool}
<div id="reg-nav" class="{css('kd-content-sidebar')}">
<form>
<select name="clientId"
id="select-client-id"
class="{css('kd-button')} {css('kd-button-submit')}"
onchange='this.form.submit()'>
<option value="">[auto select]</option>
{for $id in $allClientIds}
<option value="{$id}" {if $id == $clientId}selected{/if}>{$id}</option>
{/for}
</select>
</form>
<ul id="reg-navlist">
<li>
<a href="#">Home</a>
<li>
<a href="#resources">Resources &amp; billing</a>
<li>
<ul>
<span class="{css('reg-navlist-sub')}">Settings</span>
<li>
<a href="#whois-settings">WHOIS</a>
<li>
<a href="#security-settings">Security</a>
<li>
<a href="#contact-settings">Contact</a>
{if $isAdmin}
<li>
<a href="#admin-settings">Admin</a>
{/if}
</ul>
<li>
<a href="#contact-us">Contact us</a>
</ul>
</div>
{/template}
/**
* Feature disabled
*/
{template .disabled}
{@param logoFilename: string}
{@param productName: string}
{call registry.soy.console.header}
{param app: 'registrar' /}
{param subtitle: 'Console Disabled' /}
{/call}
<div class="{css('whoAreYou-disabled')}">
<a class="{css('logo')}" href="/registrar">
<img src="/assets/images/{$logoFilename}" alt="{$productName}">
</a>
<h1>Console is disabled</h1>
<p>
The {$productName} registrar console is temporarily disabled. Please
contact your customer service representative for more information.
<p>
<img src="/assets/images/android_sad.png">
</div>
{/template}
/**
* Who goes thar?!
*/
{template .whoareyou}
{@param username: string} /** Arbitrary username to display. */
{@param logoutUrl: string} /** Generated URL for logging out of Google. */
{@param logoFilename: string}
{@param productName: string}
{@param? clientId: string}
{call registry.soy.console.header}
{param app: 'registrar' /}
{param subtitle: 'Not Authorized' /}
{/call}
<div class="{css('whoAreYou')}">
<a class="{css('logo')}" href="/registrar">
<img src="/assets/images/{$logoFilename}" alt="{$productName}">
</a>
<h1>You need permission</h1>
{if isNonnull($clientId)} // A clientId was given - but we don't have access to it
<p>
The account you are logged in as is not associated with the registrar
{sp}{$clientId}. Please contact your customer service representative or
switch to an account associated with {$clientId}. Alternatively, click
{sp}<a href="?">here</a> to find a registrar associated with your
account.
{else}
<p>
The account you are logged in as is not associated with {$productName}.
Please contact your customer service representative or
switch to an account associated with {$productName}.
{/if}
<p>
You are signed in as <strong>{$username}</strong>.
<div>
<a href="{$logoutUrl}"
class="{css('kd-button')} {css('kd-button-submit')}"
tabindex="-1">Logout and switch to another account</a>
{if isNonnull($clientId)} // A clientId was given - but we don't have access to it
{sp}
<a href="?"
class="{css('kd-button')} {css('kd-button-submit')}"
tabindex="-1">Find registrar associated with your account</a>
{/if}
</div>
</div>
{/template}
/** Welcome text and nav. */
{template .dashboard}
{@param productName: string}
<div id="domain-registrar-dashboard">
<h1>Welcome to the {$productName} Registrar Console<super>BETA</super></h1>
<p>This console can help you manage your relationship with {$productName} and
allow self-service for key operations.</p>
<table>
<tr>
<td>
<div class="{css('dashbox')}">
<img src="/assets/images/homeResources.png">
<h2>Access Resources</h2>
Use Google Drive to view<br>
onboarding FAQs, technical<br>
documentation &amp; billing reports.
</div>
<td>
<div class="{css('dashbox')}">
<img id="gear" src="/assets/images/homeSettings.png">
<h2>Manage Settings</h2>
Security, WHOIS &amp; contact<br>
settings are easy to view and edit.
</div>
<td>
<div class="{css('dashbox')}">
<img src="/assets/images/homeContact.png">
<h2>Contact Us</h2>
View important phone &amp; email<br>
contact information for<br>
{$productName}.
</div>
</tr>
</table>
<p><img id="rotate" src="/assets/images/explore_24.png">We're
hard at work creating new features for the console. Stay tuned
for updates!
</div>
{/template}
/** Contact us. */
{template .contactUs}
{@param? phonePasscode: string}
{@param integrationEmail: string}
{@param supportEmail: string}
{@param announcementsEmail: string}
{@param supportPhoneNumber: string}
<div id="domain-registrar-contact-us" class="{css('item')}">
<h1>Contact us</h1>
<p>Our support team can assist you with any technical or operational
questions you may have regarding our registry services.
<table>
<tr class="{css('kd-settings-pane-section')}">
<td>
<label class="{css('setting-label')}">Email</label>
</td>
<td class="{css('setting')}">
<p>
<a href="mailto:{$integrationEmail}">{$integrationEmail}</a><br>
For help with OT&amp;E sandbox and certification, or new
technical requirements for any of our new TLD launches.
<p>
<a href="mailto:{$supportEmail}">{$supportEmail}</a><br>
For general purpose questions once you are integrated
with our registry system. If the issue is urgent, please put
&quot;Urgent&quot; in the email title.
<p class="{css('description')}">Note: You may receive occasional service
announcements
via <strong>{$announcementsEmail}</strong>. You
will not be able to reply to those messages.
<tr><td colspan="2"><hr>
<tr class="{css('kd-settings-pane-section')}">
<td>
<label class="{css('setting-label')}">Phone</label>
<span class="{css('description')}">For general support inquiries 24x7</span>
</td>
<td class="{css('setting')}">
<p>Please be ready with your account name and telephone passcode
when contacting us by phone.
<p>Your telephone passcode
is: <span id="domain-registrar-phone-passcode">
{if (isNonnull($phonePasscode))}
{$phonePasscode}
{else}
<em>pending allocation</em>
{/if}
</span>
<p>Call us at:
<p id="registry-phone"><a href="tel:{$supportPhoneNumber}">{$supportPhoneNumber}</a>
</td>
</table>
</div>
{/template}
/** Resources and billing links. */
{template .resources}
{@param? driveFolderId: string}
{@param technicalDocsUrl: string}
{@param premiumPriceAckRequired: bool}
{@param readonly: bool}
<div id="domain-registrar-resources">
<h1>Resources &amp; billing</h1>
<p>
The registry system uses <strong>Google Drive</strong> to share
important documentation.
<h2><img src="/assets/images/folder.png">TLD information</h2>
<p>
Find onboarding FAQs &amp; technical documentation here:
<br><br>
<a class="{css('kd-button')} {css('kd-button-submit')}"
href="{$technicalDocsUrl}"
target="_blank" rel="noopener">View TLD information on Google Drive</a>
<h2><img src="/assets/images/folder.png">Billing details</h2>
<p>
Find information on all transaction activity behind your monthly invoices in this folder.
<p>
{if (isNonnull($driveFolderId))}
<a id="reg-resources-driveLink"
class="{css('kd-button')} {css('kd-button-submit')}"
href="https://drive.google.com/drive/folders/{$driveFolderId}"
target="_blank" rel="noopener">View billing details on Google Drive</a>
{else}
<em>Your billing folder is pending allocation.</em>
{/if}
<h2><img src="/assets/images/folder.png">EPP Settings</h2>
<p>Use the 'Edit' button above to switch to enable editing the information
below. <i>Updates may require up to 10 minutes to take effect.</i>
<form name="item" class="{css('item')} {css('registrar')}">
<input type="checkbox" id="premiumPriceAckRequired" name="premiumPriceAckRequired"
{if $premiumPriceAckRequired} checked{/if}
{if $readonly} disabled{/if}>
Require use of fee extension to acknowledge all premium domain prices.
</form>
</div>
{/template}
/** Loading page. */
{template .loading}
<img alt="[Loading...]" src="/assets/images/loader4x.gif" width="87" height="87">
{/template}