2013-10-23 02:39:36 +00:00
< script src = "static/lib/Blob.js" > < / script >
< script src = "static/lib/FileSaver.js" > < / script >
< script src = "static/lib/jquery.base64.min.js" > < / script >
2013-10-01 20:42:20 +00:00
< div class = "loading" ng-show = "loading" >
2013-10-24 21:41:37 +00:00
< i class = "fa fa-spinner fa-spin fa-3x" > < / i >
2013-10-01 20:42:20 +00:00
< / div >
< div class = "container" ng-show = "!loading && (!repo || !permissions)" >
2013-09-27 19:26:16 +00:00
No repository found
< / div >
2013-10-01 20:42:20 +00:00
< div class = "container repo repo-admin" ng-show = "!loading && repo && permissions" >
2013-09-27 19:26:16 +00:00
< div class = "header" >
2013-10-24 21:41:37 +00:00
< a href = "{{ '/repository/' + repo.namespace + '/' + repo.name }}" class = "back" > < i class = "fa fa-chevron-left" > < / i > < / a >
2013-09-27 19:26:16 +00:00
< h3 >
2013-10-22 05:26:14 +00:00
< span class = "repo-circle no-background" repo = "repo" > < / span > < span style = "color: #aaa;" > {{repo.namespace}}< / span > < span style = "color: #ccc" > /< / span > {{repo.name}}
2013-09-27 19:26:16 +00:00
< / h3 >
< / div >
2013-09-28 21:11:10 +00:00
<!-- User Access Permissions -->
2013-09-27 19:26:16 +00:00
< div class = "panel panel-default" >
2013-11-02 01:48:10 +00:00
< div class = "panel-heading" > User < span ng-show = "repo.is_organization" > and Team< / span > Access Permissions
2013-10-17 18:46:23 +00:00
2013-11-02 01:48:10 +00:00
< i class = "info-icon fa fa-info-circle" data-placement = "left" data-content = "Allow any number of users or teams to read, write or administer this repository" > < / i >
2013-10-17 18:46:23 +00:00
< / div >
2013-09-27 19:26:16 +00:00
< div class = "panel-body" >
2013-10-01 20:42:20 +00:00
2013-10-01 23:36:57 +00:00
< table class = "permissions" >
< thead >
< tr >
2013-11-02 01:48:10 +00:00
< td > User< span ng-show = "repo.is_organization" > /Team< / span > < / td >
2013-10-01 23:36:57 +00:00
< td > Permissions< / td >
< td > < / td >
< / tr >
< / thead >
2013-11-02 01:48:10 +00:00
<!-- Team Permissions -->
< tr ng-repeat = "(name, permission) in permissions['team']" >
< td class = "team entity" >
< i class = "fa fa-group" > < / i >
2013-11-04 19:56:54 +00:00
< span > < a href = "/organization/{{ repo.namespace }}/teams/{{ name }}" > {{name}}< / a > < / span >
2013-11-02 01:48:10 +00:00
< / td >
< td class = "user-permissions" >
< div class = "btn-group btn-group-sm" >
< button type = "button" class = "btn btn-default" ng-click = "setRole(name, 'read', 'team')" ng-class = "{read: 'active', write: '', admin: ''}[permission.role]" > Read only< / button >
< button type = "button" class = "btn btn-default" ng-click = "setRole(name, 'write', 'team')" ng-class = "{read: '', write: 'active', admin: ''}[permission.role]" > Write< / button >
< button type = "button" class = "btn btn-default" ng-click = "setRole(name, 'admin', 'team')" ng-class = "{read: '', write: '', admin: 'active'}[permission.role]" > Admin< / button >
< / div >
< / td >
< td >
< span class = "delete-ui" tabindex = "0" title = "Delete Permission" >
< span class = "delete-ui-button" ng-click = "deleteRole(name, 'team')" > < button class = "btn btn-danger" > Delete< / button > < / span >
< i class = "fa fa-remove" > < / i >
< / span >
< / td >
< / tr >
<!-- User Permissions -->
< tr ng-repeat = "(name, permission) in permissions['user']" >
< td class = "{{ 'user entity ' + (permission.outside_org ? 'outside' : '') }}" >
2013-10-24 21:41:37 +00:00
< i class = "fa fa-user" > < / i >
2013-11-02 01:48:10 +00:00
< span > {{name}}< / span >
2013-10-01 23:36:57 +00:00
< / td >
< td class = "user-permissions" >
< div class = "btn-group btn-group-sm" >
2013-11-02 01:48:10 +00:00
< button type = "button" class = "btn btn-default" ng-click = "setRole(name, 'read', 'user')" ng-class = "{read: 'active', write: '', admin: ''}[permission.role]" > Read only< / button >
< button type = "button" class = "btn btn-default" ng-click = "setRole(name, 'write', 'user')" ng-class = "{read: '', write: 'active', admin: ''}[permission.role]" > Write< / button >
< button type = "button" class = "btn btn-default" ng-click = "setRole(name, 'admin', 'user')" ng-class = "{read: '', write: '', admin: 'active'}[permission.role]" > Admin< / button >
2013-10-01 23:36:57 +00:00
< / div >
< / td >
< td >
< span class = "delete-ui" tabindex = "0" title = "Delete Permission" >
2013-11-02 01:48:10 +00:00
< span class = "delete-ui-button" ng-click = "deleteRole(name, 'user')" > < button class = "btn btn-danger" > Delete< / button > < / span >
2013-10-24 21:41:37 +00:00
< i class = "fa fa-remove" > < / i >
2013-10-01 23:36:57 +00:00
< / span >
< / td >
< / tr >
2013-09-28 05:23:00 +00:00
2013-10-01 23:36:57 +00:00
< tr >
< td colspan = "2" >
2013-11-02 01:48:10 +00:00
< span class = "entity-search" organization = "repo.namespace" input-title = "'Add a ' + (repo.is_organization ? 'team or ' : '') + 'user...'" entity-selected = "addNewPermission" > < / span >
2013-10-01 23:36:57 +00:00
< / td >
< / tr >
< / table >
2013-09-27 19:26:16 +00:00
< / div >
< / div >
2013-10-16 18:24:10 +00:00
<!-- Token Permissions -->
< div class = "panel panel-default" >
2013-10-17 18:46:23 +00:00
< div class = "panel-heading" > Access Token Permissions
2013-10-24 21:41:37 +00:00
< i class = "info-icon fa fa-info-circle" data-placement = "left" data-content = "Grant permissions to this repository by creating unique tokens that can be used without entering account passwords<br><br>To use in docker:<br><dl class='dl-horizontal'><dt>Username</dt><dd>$token</dd><dt>Password</dt><dd>(token value)</dd><dt>Email</dt><dd>(any value)</dd></dl>" > < / i >
2013-10-17 18:46:23 +00:00
< / div >
2013-10-16 18:24:10 +00:00
< div class = "panel-body" >
2013-10-17 20:50:58 +00:00
< form name = "createTokenForm" ng-submit = "createToken()" >
< table class = "permissions" >
< thead >
< tr >
< td > Token Description< / td >
< td > Permissions< / td >
< td > < / td >
< / tr >
< / thead >
< tr ng-repeat = "(code, token) in tokens" >
< td class = "user token" >
2013-10-24 21:41:37 +00:00
< i class = "fa fa-key" > < / i >
2013-10-17 20:50:58 +00:00
< a ng-click = "showToken(token.code)" > {{ token.friendlyName }}< / a >
< / td >
< td class = "user-permissions" >
< div class = "btn-group btn-group-sm" >
< button type = "button" class = "btn btn-default" ng-click = "changeTokenAccess(token.code, 'read')" ng-class = "{read: 'active', write: ''}[token.role]" > Read only< / button >
< button type = "button" class = "btn btn-default" ng-click = "changeTokenAccess(token.code, 'write')" ng-class = "{read: '', write: 'active'}[token.role]" > Write< / button >
< / div >
2013-10-16 18:24:10 +00:00
< / td >
< td >
2013-10-17 20:50:58 +00:00
< span class = "delete-ui" tabindex = "0" title = "Delete Token" >
< span class = "delete-ui-button" ng-click = "deleteToken(token.code)" > < button class = "btn btn-danger" type = "button" > Delete< / button > < / span >
2013-10-24 21:41:37 +00:00
< i class = "fa fa-remove" > < / i >
2013-10-17 20:50:58 +00:00
< / span >
2013-10-16 18:24:10 +00:00
< / td >
2013-10-17 20:50:58 +00:00
< / tr >
< tr >
< td >
< input type = "text" class = "form-control" placeholder = "New token description" ng-model = "newToken.friendlyName" required >
< / td >
< td >
< button type = "submit" ng-disabled = "createTokenForm.$invalid" class = "btn btn-sm btn-default" > Create< / button >
< / td >
< / tr >
< / table >
< / form >
2013-10-16 18:24:10 +00:00
< / div >
< / div >
2013-09-28 21:11:10 +00:00
<!-- Public/Private -->
< div class = "panel panel-default" >
< div class = "panel-heading" > Repository Settings< / div >
< div class = "panel-body" >
2013-10-01 23:36:57 +00:00
< div class = "repo-access-state" ng-show = "!repo.is_public" >
2013-10-24 21:41:37 +00:00
< div class = "state-icon" > < i class = "fa fa-lock" > < / i > < / div >
2013-10-01 23:36:57 +00:00
This repository is currently < b > private< / b > . Only users on the above access list may view and interact with it.
2013-09-28 21:11:10 +00:00
2013-10-01 23:36:57 +00:00
< div class = "change-access" >
< button class = "btn btn-danger" ng-click = "askChangeAccess('public')" > Make Public< / button >
< / div >
2013-09-28 21:11:10 +00:00
< / div >
< div class = "repo-access-state" ng-show = "repo.is_public" >
2013-10-26 20:03:11 +00:00
< div class = "state-icon" > < i class = "fa fa-unlock" > < / i > < / div >
2013-09-28 21:11:10 +00:00
2013-10-01 23:36:57 +00:00
This repository is currently < b > public< / b > and is visible to all users, and may be pulled by all users.
2013-09-28 21:11:10 +00:00
2013-10-01 23:36:57 +00:00
< div class = "change-access" >
< button class = "btn btn-danger" ng-click = "askChangeAccess('private')" > Make Private< / button >
< / div >
2013-09-28 21:11:10 +00:00
< / div >
< / div >
< / div >
2013-10-01 18:14:30 +00:00
< br >
<!-- Delete Repo -->
< div class = "panel panel-default" >
< div class = "panel-heading" > Delete Repository< / div >
< div class = "panel-body" >
< div class = "repo-delete" >
2013-10-01 23:36:57 +00:00
< div class = "alert alert-danger" > Deleting a repository < b > cannot be undone< / b > . Here be dragons!< / div >
< button class = "btn btn-danger" ng-click = "askDelete()" > Delete Repository< / button >
2013-10-01 18:14:30 +00:00
< / div >
< / div >
< / div >
2013-09-27 19:26:16 +00:00
2013-09-27 19:48:54 +00:00
<!-- Modal message dialog -->
< div class = "modal fade" id = "cannotchangeModal" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< button type = "button" class = "close" data-dismiss = "modal" aria-hidden = "true" > × < / button >
2013-10-01 18:14:30 +00:00
< h4 class = "modal-title" > Cannot change< / h4 >
2013-09-27 19:48:54 +00:00
< / div >
< div class = "modal-body" >
2013-10-01 18:14:30 +00:00
The selected action could not be performed because you do not have that authority.
2013-09-27 19:48:54 +00:00
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2013-10-16 18:24:10 +00:00
<!-- Modal message dialog -->
< div class = "modal fade" id = "tokenmodal" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< button type = "button" class = "close" data-dismiss = "modal" aria-hidden = "true" > × < / button >
2013-10-24 21:41:37 +00:00
< h4 class = "modal-title" > < i class = "fa fa-key" > < / i > {{ shownToken.friendlyName }}< / h4 >
2013-10-16 18:24:10 +00:00
< / div >
2013-10-17 18:46:23 +00:00
< div class = "modal-body token-dialog-body" >
2013-10-17 20:50:58 +00:00
< div class = "alert alert-info" > The docker < u > username< / u > is < b > $token< / b > and the < u > password< / u > is the token. You may use any value for email.< / div >
< div class = "well well-sm" >
< input id = "token-view" class = "token-view" type = "text" value = "{{ shownToken.code }}" onClick = "this.select();" readonly >
< / div >
2013-10-16 18:24:10 +00:00
< / div >
< div class = "modal-footer" >
2013-10-23 02:39:36 +00:00
< span class = "download-cfg" ng-show = "isDownloadSupported()" >
< i class = "icon-download" > < / i >
2013-10-23 02:46:43 +00:00
< a href = "javascript:void(0)" ng-click = "downloadCfg(shownToken)" > Download .dockercfg file< / a >
2013-10-23 02:39:36 +00:00
< / span >
2013-10-17 20:50:58 +00:00
< div id = "clipboardCopied" style = "display: none" >
Copied to clipboard
< / div >
< button id = "copyClipboard" type = "button" class = "btn btn-primary" data-clipboard-target = "token-view" > Copy to clipboard< / button >
2013-10-16 18:24:10 +00:00
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2013-09-27 19:48:54 +00:00
2013-09-28 21:11:10 +00:00
<!-- Modal message dialog -->
< div class = "modal fade" id = "makepublicModal" >
< 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" > Make Repository Public< / h4 >
< / div >
< div class = "modal-body" >
< div class = "alert alert-warning" >
2013-10-01 23:36:57 +00:00
Warning: This will allow < b > anyone< / b > to pull from this repository
< / div >
Are you sure you want to make this repository public?
2013-09-28 21:11:10 +00:00
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-danger" ng-click = "changeAccess('public')" > Make Public< / button >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
<!-- Modal message dialog -->
< div class = "modal fade" id = "makeprivateModal" >
< 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" > Make Repository Private< / h4 >
< / div >
< div class = "modal-body" >
< div class = "alert alert-warning" >
2013-10-01 23:36:57 +00:00
Warning: Only users on the permissions list will be able to access this repository.
< / div >
Are you sure you want to make this repository private?
2013-09-28 21:11:10 +00:00
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-success" ng-click = "changeAccess('private')" > Make Private< / button >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2013-09-27 19:48:54 +00:00
<!-- Modal message dialog -->
< div class = "modal fade" id = "onlyadminModal" >
< 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" > Cannot change permissions< / h4 >
< / div >
< div class = "modal-body" >
The selected permissions could not be changed because the user is the only < b > admin< / b > on the repo.
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2013-10-01 18:14:30 +00:00
<!-- Modal message dialog -->
< div class = "modal fade" id = "confirmdeleteModal" >
< 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" > Delete Repository?< / h4 >
< / div >
< div class = "modal-body" >
Are you < b > absolutely, positively< / b > sure you would like to delete this repository? This < b > cannot be undone< / b > .
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-danger" ng-click = "deleteRepo()" > Delete Repository< / button >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Close< / button >
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2013-11-02 01:48:10 +00:00
<!-- Modal message dialog -->
< div class = "modal fade" id = "confirmaddoutsideModal" >
< 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" > Add User?< / h4 >
< / div >
< div class = "modal-body" >
The selected user is outside of your organization. Are you sure you want to grant the user access to this repository?
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-primary" ng-click = "grantRole()" > Yes, I'm sure< / button >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
< / div >
< / div > <!-- /.modal - content -->
< / div > <!-- /.modal - dialog -->
< / div > <!-- /.modal -->
2013-09-27 00:34:58 +00:00
< / div >