portainer/portainer

View on GitHub
app/docker/views/services/edit/includes/secrets.html

Summary

Maintainability
Test Coverage
<div ng-if="applicationState.endpoint.apiVersion >= 1.25" id="service-secrets">
  <rd-widget>
    <rd-widget-header icon="list" title-text="Secrets"> </rd-widget-header>
    <rd-widget-body classes="no-padding">
      <div class="form-inline" style="padding: 10px" authorization="DockerServiceUpdate">
        Add a secret:
        <select
          class="form-control !h-[30px] !text-[13px]"
          ng-options="secret.Name for secret in secrets | orderBy: 'Name'"
          ng-model="state.addSecret.secret"
          data-cy="service-secrets-select"
        >
          <option selected disabled hidden value="">Select a secret</option>
        </select>
        <div class="form-group" ng-if="applicationState.endpoint.apiVersion >= 1.3 && state.addSecret.override">
          Target:
          <input class="form-control" ng-model="state.addSecret.target" placeholder="/path/in/container" />
        </div>
        <div class="btn-group btn-group-sm" ng-if="applicationState.endpoint.apiVersion >= 1.3">
          <label class="btn btn-light" ng-model="state.addSecret.override" uib-btn-radio="false">Default location</label>
          <label class="btn btn-light" ng-model="state.addSecret.override" uib-btn-radio="true">Override</label>
        </div>
        <a class="btn btn-default btn-sm" ng-click="addSecret(service, state.addSecret)"> <pr-icon icon="'plus'"></pr-icon> add secret </a>
      </div>
      <table class="table" style="margin-top: 5px">
        <thead>
          <tr>
            <th>Name</th>
            <th>File name</th>
            <th>UID</th>
            <th>GID</th>
            <th>Mode</th>
            <th></th>
          </tr>
        </thead>
        <tbody>
          <tr ng-repeat="secret in service.ServiceSecrets">
            <td
              ><a ui-sref="docker.secrets.secret({id: secret.Id})">{{ secret.Name }}</a></td
            >
            <td>{{ secret.FileName }}</td>
            <td>{{ secret.Uid }}</td>
            <td>{{ secret.Gid }}</td>
            <td>{{ secret.Mode }}</td>
            <td authorization="DockerServiceUpdate">
              <button class="btn btn-dangerlight pull-right" type="button" ng-click="removeSecret(service, $index)" ng-disabled="isUpdating">
                <pr-icon icon="'trash-2'" size="'md'"></pr-icon>
              </button>
            </td>
          </tr>
          <tr ng-if="service.ServiceSecrets.length === 0">
            <td colspan="6" class="text-muted text-center">No secrets associated to this service.</td>
          </tr>
        </tbody>
      </table>
    </rd-widget-body>
    <rd-widget-footer authorization="DockerServiceUpdate">
      <div class="btn-toolbar" role="toolbar">
        <div class="btn-group" role="group">
          <button type="button" class="btn btn-primary btn-sm" ng-disabled="!hasChanges(service, ['ServiceSecrets'])" ng-click="updateService(service)">Apply changes</button>
          <button type="button" class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            <pr-icon icon="'chevron-down'"></pr-icon>
          </button>
          <ul class="dropdown-menu">
            <li><a ng-click="cancelChanges(service, ['ServiceSecrets'])">Reset changes</a></li>
            <li><a ng-click="cancelChanges(service)">Reset all changes</a></li>
          </ul>
        </div>
      </div>
    </rd-widget-footer>
  </rd-widget>
</div>