231 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			231 lines
		
	
	
	
		
			10 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <div class="resource-view user-view"
 | |
|      resource="userResource"
 | |
|      error-message="'User not found'">
 | |
|   <div class="page-content">
 | |
|     <div class="cor-title">
 | |
|       <span class="cor-title-link"></span>
 | |
|       <span class="cor-title-content">
 | |
|         <span class="avatar" size="32" data="viewuser.avatar"></span>
 | |
|         <span class="user-name">{{ viewuser.username }}</span>
 | |
|       </span>
 | |
|       <span class="cor-title-action" ng-if="viewuser.is_me">
 | |
|         <a href="/new/?namespace={{ viewuser.username }}">
 | |
|             <i class="fa fa-plus" data-title="Create new repository"></i>
 | |
|             Create New Repository
 | |
|         </a>
 | |
|       </span>
 | |
|     </div>
 | |
| 
 | |
|     <div class="co-main-content-panel user-repo-list" ng-if="!viewuser.is_me">
 | |
|       <div class="repo-list-grid"
 | |
|            repositories-resource="repositoriesResource"
 | |
|            starred="false"
 | |
|            namespace="namespace"
 | |
|            hide-title="true"></div>
 | |
|     </div>
 | |
| 
 | |
|     <div class="cor-tab-panel" ng-if="viewuser.is_me">
 | |
|       <div class="cor-tabs" quay-show="viewuser.is_me">
 | |
|         <span class="cor-tab" tab-active="true" tab-title="Repositories" tab-target="#repos">
 | |
|           <i class="fa fa-hdd-o"></i>
 | |
|         </span>
 | |
|         <span class="cor-tab" tab-title="Robot Accounts" tab-init="showRobots()" tab-target="#robots">
 | |
|           <i class="fa ci-robot"></i>
 | |
|         </span>
 | |
|         <span class="cor-tab" tab-title="User Settings" tab-target="#settings">
 | |
|           <i class="fa fa-gears"></i>
 | |
|         </span>
 | |
|         <span class="cor-tab" tab-title="Billing" tab-target="#usage"
 | |
|               quay-show="Features.BILLING">
 | |
|           <i class="fa fa-credit-card"></i>
 | |
|         </span>
 | |
|         <span class="cor-tab" tab-title="Billing Invoices" tab-target="#invoices"
 | |
|               tab-init="showInvoices()" quay-show="Features.BILLING">
 | |
|           <i class="fa ci-invoice"></i>
 | |
|         </span>
 | |
|         <span class="cor-tab" tab-title="External Logins" tab-target="#external">
 | |
|           <i class="fa fa-external-link-square"></i>
 | |
|         </span>
 | |
|         <span class="cor-tab" tab-title="Authorized Applications" tab-target="#applications"
 | |
|               tab-init="showApplications()">
 | |
|           <i class="fa ci-application"></i>
 | |
|         </span>
 | |
|       </div> <!-- /cor-tabs -->
 | |
| 
 | |
|       <div class="cor-tab-content">
 | |
|         <!-- Repositories -->
 | |
|         <div id="repos" class="tab-pane active">
 | |
|           <h3>Repositories</h3>
 | |
|           <div class="repo-list-grid"
 | |
|                repositories-resource="repositoriesResource"
 | |
|                starred="false"
 | |
|                namespace="namespace"
 | |
|                hide-title="true">
 | |
|           </div>
 | |
|         </div>
 | |
| 
 | |
|         <!-- Robot Accounts -->
 | |
|         <div id="robots" class="tab-pane">
 | |
|           <div class="robots-manager" user="viewuser" is-enabled="showRobotsCounter"></div>
 | |
|         </div>
 | |
| 
 | |
|         <!-- External Logins -->
 | |
|         <div id="external" class="tab-pane">
 | |
|           <div class="external-logins-manager" user="viewuser"></div>
 | |
|         </div>
 | |
| 
 | |
|         <!-- Applications -->
 | |
|         <div id="applications" class="tab-pane">
 | |
|           <div class="authorized-apps-manager" user="viewuser" is-enabled="showAppsCounter"></div>
 | |
|         </div>
 | |
| 
 | |
|         <!-- Plan and Usage -->
 | |
|         <div id="usage" class="tab-pane" quay-require="['BILLING']">
 | |
|           <h3>Plan Usage and Billing</h3>
 | |
|           <div class="plan-manager" user="viewuser" has-subscription="hasSubscription"></div>
 | |
|           <hr ng-show="hasSubscription">
 | |
|           <div class="billing-options" user="viewuser" ng-show="hasSubscription"></div>
 | |
|         </div>
 | |
| 
 | |
|         <!-- Billing Invoices -->
 | |
|         <div id="invoices" class="tab-pane" quay-require="['BILLING']">
 | |
|           <h3>Billing Invoices</h3>
 | |
|           <div class="billing-invoices" user="viewuser"
 | |
|                makevisible="showInvoicesCounter"></div>
 | |
|         </div>
 | |
| 
 | |
|         <!-- Settings -->
 | |
|         <div id="settings" class="tab-pane">
 | |
|           <h3>User Settings</h3>
 | |
| 
 | |
|           <!-- E-mail address -->
 | |
|           <div class="co-panel" quay-show="Features.MAILING">
 | |
|             <div class="co-panel-heading"><i class="fa fa-envelope-o"></i> E-mail Address</div>
 | |
|             <div class="panel-body" style="padding-top: 5px;">
 | |
| 
 | |
|               <div class="co-alert co-alert-success" ng-show="changeEmailInfo.state == 'sent'">
 | |
|                 An e-mail has been sent to {{ sentEmail }} to verify the change.
 | |
|               </div>
 | |
| 
 | |
|               <div class="cor-loader" ng-show="changeEmailInfo.state == 'sending'"></div>
 | |
|               <div ng-show="changeEmailInfo.state != 'sending'">
 | |
|                 <form class="form-change user-settings-form"
 | |
|                       id="changeEmailForm" name="changeEmailForm"
 | |
|                       ng-submit="changeEmail(); changeEmailForm.$setPristine()"
 | |
|                       ng-show="!awaitingConfirmation && !registering">
 | |
| 
 | |
|                   <div class="row">
 | |
|                     <table class="col-md-6">
 | |
|                       <tr>
 | |
|                         <td>Current E-mail Address:</td>
 | |
|                         <td>{{ viewuser.email }}</td>
 | |
|                       </tr>
 | |
|                       <tr>
 | |
|                         <td>New E-mail Address:</td>
 | |
|                         <td>
 | |
|                           <input type="email" class="form-control"
 | |
|                                  placeholder="Your new e-mail address"
 | |
|                                  ng-model="changeEmailInfo.email" required>
 | |
|                         </td>
 | |
|                       </tr>
 | |
|                     </table>
 | |
|                   </div>
 | |
| 
 | |
|                   <button class="btn btn-primary"
 | |
|                         ng-disabled="changeEmailForm.$invalid || changeEmail.email == viewuser.email"
 | |
|                         type="submit">
 | |
|                     Change E-mail Address
 | |
|                  </button>
 | |
|                 </form>
 | |
|               </div>
 | |
|             </div>
 | |
|           </div> <!-- /E-mail -->
 | |
| 
 | |
|           <!-- Password -->
 | |
|           <div class="co-panel" style="margin-bottom: 0px">
 | |
|             <div class="co-panel-heading"><i class="fa fa-lock"></i> Password</div>
 | |
|             <div class="panel-body" style="padding-top: 5px;">
 | |
|               <div class="cor-loader" ng-show="changePasswordInfo.state == 'changing'"></div>
 | |
| 
 | |
|               <!-- Encrypted Password -->
 | |
|               <div class="row" ng-show="changePasswordInfo.state !='changing'">
 | |
|                 <div class="panel">
 | |
|                   <div class="panel-title">Generate Encrypted Password</div>
 | |
| 
 | |
|                   <div class="panel-body">
 | |
|                     <div class="co-alert co-alert-info" ng-if="!Features.REQUIRE_ENCRYPTED_BASIC_AUTH">
 | |
|                       Due to Docker storing passwords entered on the command line in <strong>plaintext</strong>, it is highly recommended to use the button below to generate an an encrypted version of your password.
 | |
|                     </div>
 | |
| 
 | |
|                     <div class="co-alert co-alert-warning" ng-if="Features.REQUIRE_ENCRYPTED_BASIC_AUTH">
 | |
|                       This installation is set to <strong>require</strong> encrypted passwords when
 | |
|                       using the Docker command line interface. To generate an encrypted password, click the button below.
 | |
|                     </div>
 | |
| 
 | |
|                     <button class="btn btn-primary" ng-click="generateClientToken()">
 | |
|                       <i class="fa fa-key" style="margin-right: 6px;"></i>Generate Encrypted Password
 | |
|                     </button>
 | |
|                   </div>
 | |
|                 </div>
 | |
|               </div>
 | |
| 
 | |
|               <!-- Change Password -->
 | |
|               <div class="row" ng-show="changePasswordInfo.state !='changing'">
 | |
|                 <div class="panel">
 | |
|                   <div class="panel-title">Change Password</div>
 | |
| 
 | |
|                   <span class="help-block" ng-show="changePasswordInfo.state == 'changed'">
 | |
|                     Password changed successfully
 | |
|                   </span>
 | |
| 
 | |
|                   <div class="panel-body">
 | |
|                     <div class="co-alert co-alert-warning">Note: Changing your password will also invalidate any generated encrypted passwords.</div>
 | |
| 
 | |
| 
 | |
|                     <form class="form-change col-md-6" id="changePasswordForm" name="changePasswordForm" ng-submit="changePassword(); changePasswordForm.$setPristine()"
 | |
|                           ng-show="!awaitingConfirmation && !registering">
 | |
|                       <input type="password" class="form-control" placeholder="Your new password" ng-model="changePasswordInfo.password" required
 | |
|                              ng-pattern="/^.{8,}$/">
 | |
|                       <input type="password" class="form-control" placeholder="Verify your new password" ng-model="changePasswordInfo.repeatPassword"
 | |
|                              match="changePasswordInfo.password" required ng-pattern="/^.{8,}$/">
 | |
|                       <button class="btn btn-danger" ng-disabled="changePasswordForm.$invalid" type="submit"
 | |
|                               analytics-on analytics-event="change_pass">Change Password</button>
 | |
|                     </form>
 | |
|                   </div>
 | |
|                 </div>
 | |
|               </div>
 | |
|             </div>
 | |
|           </div> <!-- /Password -->
 | |
| 
 | |
|           <!-- Convert -->
 | |
|           <div class="co-panel" quay-show="Config.AUTHENTICATION_TYPE == 'Database'">
 | |
|             <div class="co-panel-heading"><i class="fa fa-group"></i> Convert to organization</div>
 | |
|             <div class="panel-body" style="padding-top: 5px;">
 | |
|               <div class="convert-user-to-org" user="viewuser"></div>
 | |
|             </div>
 | |
|           </div>
 | |
|         </div> <!-- /Convert -->
 | |
| 
 | |
|       </div> <!-- /cor-tab-content -->
 | |
|     </div>
 | |
|   </div>
 | |
| 
 | |
|   <!-- Modal message dialog -->
 | |
|   <div class="modal fade" id="clientTokenModal">
 | |
|     <div class="modal-dialog">
 | |
|       <div class="modal-content">
 | |
|         <div class="modal-header">
 | |
|           <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
 | |
|           <h4 class="modal-title">Encrypted Password</h4>
 | |
|         </div>
 | |
|         <div class="modal-body">
 | |
|           <div style="margin-bottom: 10px;">Your generated encrypted password:</div>
 | |
|           <div class="copy-box" value="generatedClientToken"></div>
 | |
|         </div>
 | |
|         <div class="modal-footer">
 | |
|           <button type="button" class="btn btn-default" data-dismiss="modal">Dismiss</button>
 | |
|         </div>
 | |
|       </div><!-- /.modal-content -->
 | |
|     </div><!-- /.modal-dialog -->
 | |
|   </div><!-- /.modal -->
 | |
| </div>
 |