2016-06-07 22:53:36 +02:00
<!-- Modal add client -->
< div class = "modal fade" id = "clientAddModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2017-03-20 19:12:32 -07:00
< h4 class = "modal-title" > Add OAuth Client< / h4 >
2016-06-07 22:53:36 +02:00
< / div >
< div class = "modal-body" >
< form name = "clientAddForm" role = "form" novalidate ng-submit = "clientAdd.submit()" autocomplete = "off" >
< div class = "form-group" ng-class = "{ 'has-error': (clientAddForm.name.$dirty && clientAddForm.name.$invalid) || (!clientAddForm.name.$dirty && clientAdd.error.name) }" >
2017-03-20 19:12:32 -07:00
< label class = "control-label" > Application name< / label >
2016-06-07 22:53:36 +02:00
< div class = "control-label" ng-show = "(!clientAddForm.name.$dirty && clientAdd.error.name) || (clientAddForm.name.$dirty && clientAddForm.name.$invalid)" >
< small ng-show = "clientAddForm.name.$error.required" > A name is required< / small >
< small ng-show = "!clientAddForm.name.$dirty && clientAdd.error.name" > {{ clientAdd.error.name }}< / small >
< / div >
2016-06-23 10:34:26 +02:00
< input type = "text" class = "form-control" ng-model = "clientAdd.name" name = "name" id = "clientAddName" required autofocus >
2016-06-07 22:53:36 +02:00
< / div >
< div class = "form-group" ng-class = "{ 'has-error': (clientAddForm.scope.$dirty && clientAddForm.scope.$invalid) || (!clientAddForm.scope.$dirty && clientAdd.error.scope) }" >
< label class = "control-label" > Scope< / label >
< div class = "control-label" ng-show = "(!clientAddForm.scope.$dirty && clientAdd.error.scope) || (clientAddForm.scope.$dirty && clientAddForm.scope.$invalid)" >
< small ng-show = "clientAddForm.scope.$error.required" > A scope is required< / small >
< small ng-show = "!clientAddForm.scope.$dirty && clientAdd.error.scope" > {{ clientAdd.error.scope }}< / small >
< / div >
< input type = "text" class = "form-control" ng-model = "clientAdd.scope" name = "scope" id = "clientAddScope" placeholder = "Specify any number of scope separated by a comma ','" required >
< / div >
< div class = "form-group" ng-class = "{ 'has-error': (clientAddForm.redirectURI.$dirty && clientAddForm.redirectURI.$invalid) || (!clientAddForm.redirectURI.$dirty && clientAdd.error.redirectURI) }" >
2017-03-20 19:12:32 -07:00
< label class = "control-label" > Authorization callback URL< / label >
2016-06-07 22:53:36 +02:00
< div class = "control-label" ng-show = "!clientAddForm.redirectURI.$dirty && clientAdd.error.redirectURI" >
< small ng-show = "!clientAddForm.redirectURI.$dirty && clientAdd.error.redirectURI" > {{ clientAdd.error.redirectURI }}< / small >
< / div >
2017-03-20 19:12:32 -07:00
< input type = "text" class = "form-control" ng-model = "clientAdd.redirectURI" name = "redirectURI" id = "clientAddRedirectURI" required >
2016-06-07 22:53:36 +02:00
< / div >
< input class = "hide" type = "submit" ng-disabled = "clientAddForm.$invalid || clientAdd.busy" / >
< / form >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
2017-03-20 19:12:32 -07:00
< button type = "button" class = "btn btn-success" ng-click = "clientAdd.submit()" ng-disabled = "clientAddForm.$invalid || clientAdd.busy" > < i class = "fa fa-circle-o-notch fa-spin" ng-show = "clientAdd.busy" > < / i > Add OAuth Client< / button >
2016-06-07 22:53:36 +02:00
< / div >
< / div >
< / div >
< / div >
<!-- Modal remove client -->
< div class = "modal fade" id = "clientRemoveModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
2017-03-20 19:55:23 -07:00
< h4 class = "modal-title" > Remove OAuth Client< / h4 >
2016-06-07 22:53:36 +02:00
< / div >
< div class = "modal-body" >
< p >
Removing client < b > {{ clientRemove.client.appId }}< / b > will also remove all access from scripts and apps using those credentials.
You may want to consult the other Cloudron admins first.
< / p >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Cancel< / button >
2017-03-20 19:55:23 -07:00
< button type = "button" class = "btn btn-danger" ng-click = "clientRemove.submit()" ng-disabled = "clientRemove.busy" > < i class = "fa fa-circle-o-notch fa-spin" ng-show = "clientRemove.busy" > < / i > Remove OAuth Client< / button >
2016-06-07 22:53:36 +02:00
< / div >
< / div >
< / div >
< / div >
<!-- Modal add token -->
< div class = "modal fade" id = "tokenAddModal" tabindex = "-1" role = "dialog" >
< div class = "modal-dialog" >
< div class = "modal-content" >
< div class = "modal-header" >
< h4 class = "modal-title" > New token created< / h4 >
< / div >
< div class = "modal-body" >
< p > < b ng-click-select > {{ tokenAdd.token.accessToken }}< / b > < / p >
< / div >
< div class = "modal-footer" >
< button type = "button" class = "btn btn-default" data-dismiss = "modal" > Done< / button >
< / div >
< / div >
< / div >
< / div >
< br / >
2016-07-02 22:33:02 -05:00
< div class = "section-header" ng-show = "user.admin" >
< div class = "text-left" >
< h3 > API< / h3 >
< / div >
< / div >
< div class = "card" style = "margin-bottom: 15px;" ng-show = "user.admin" >
< div class = "row" >
< div class = "col-xs-12" >
2017-01-29 10:26:14 -08:00
< p >
The Cloudron < a href = "https://cloudron.io/references/api.html" target = "_blank" > REST API< / a > can be used to manage all aspects of the Cloudron like adding users and installing apps.
< br / >
< br / >
You can develop apps for the Cloudron using the < a href = "https://cloudron.io/references/cli.html" target = "_blank" > command-line tool< / a > . See the < a href = "{{ config.webServerOrigin }}/documentation.html" target = "_blank" > docs< / a > for more information.
< / p >
2016-07-02 22:33:02 -05:00
< / div >
< / div >
< / div >
< br / >
2016-06-07 22:53:36 +02:00
< div class = "section-header" >
< div class = "text-left" >
2017-01-29 10:26:14 -08:00
< h3 > Access tokens < button class = "btn btn-xs btn-primary btn-outline pull-right" ng-click = "tokenAdd.show(apiClient)" > < i class = "fa fa-plus" > < / i > New Token< / button > < / h3 >
2016-06-08 11:55:40 +02:00
< / div >
< / div >
<!-- we will always at least have the webadmin token here, so activeClients always will have one entry with at least one token -->
< div class = "card" >
< div class = "grid-item-top" >
< div class = "row" >
< div class = "col-xs-12" >
2016-06-08 16:48:27 -07:00
< p > These tokens can be used to access the < a href = "https://cloudron.io/references/api.html" target = "_blank" > Cloudron API< / a > . They have the < b > admin< / b > < a href = "https://cloudron.io/references/api.html#scopes" target = "_blank" > scope< / a > and do not expire.< / p >
2017-03-20 19:12:32 -07:00
< br / >
2016-06-08 09:37:10 -07:00
< h4 class = "text-muted" > Active Tokens< / h4 >
2016-06-08 11:55:40 +02:00
< hr / >
< p ng-repeat = "token in apiClient.activeTokens" >
2017-03-20 19:12:32 -07:00
< span ng-click-select > {{ token.accessToken }}< / span > < button class = "btn btn-xs btn-danger pull-right" ng-click = "removeToken(apiClient, token)" title = "Revoke Token" > < i class = "fa fa-trash-o" > < / i > < / button >
2016-06-08 11:55:40 +02:00
< / p >
< / div >
< / div >
< / div >
< / div >
< br / >
< div class = "section-header" >
< div class = "text-left" >
2017-03-20 19:12:32 -07:00
< h3 > OAuth Apps< button class = "btn btn-xs btn-primary btn-outline pull-right" ng-click = "clientAdd.show()" > < i class = "fa fa-plus" > < / i > New OAuth Client< / button > < / h3 >
2016-06-07 22:53:36 +02:00
< / div >
< / div >
< br / >
<!-- we will always at least have the webadmin token here, so activeClients always will have one entry with at least one token -->
< div class = "card" ng-repeat = "client in activeClients | activeOAuthClients:user" >
< div class = "grid-item-top" >
< div class = "row" >
< div class = "col-xs-12" >
< h4 class = "text-muted" >
2016-06-09 16:17:14 +02:00
{{client.name}} < span ng-show = "client.type !== 'external' && client.type !== 'built-in'" > on {{client.location}}{{ config.isCustomDomain ? '.' : '-' }}{{config.fqdn}}< / span >
2016-06-07 22:53:36 +02:00
< / h4 >
< / div >
< / div >
< div class = "row" >
< div class = "col-xs-12" >
< div class = "row" >
< div class = "col-xs-12" >
2016-06-08 12:52:19 -07:00
< b > {{ client.activeTokens.length }}< / b > active token(s).
2016-06-07 22:53:36 +02:00
< br / >
2016-06-07 22:56:27 +02:00
< a href = "" data-toggle = "collapse" data-parent = "#accordion" data-target = "#collapse{{client.id}}" > Advanced< / a >
2016-06-07 22:53:36 +02:00
< div id = "collapse{{client.id}}" class = "panel-collapse collapse" >
< div class = "panel-body" >
2017-03-20 19:55:23 -07:00
< h4 class = "text-muted" > Credentials < button class = "btn btn-xs btn-danger pull-right" ng-click = "clientRemove.show(client)" title = "Remove OAuth Client" ng-show = "client.type === 'external'" > Remove OAuth Client< / button > < / h4 >
2016-06-08 16:48:27 -07:00
< hr / >
2016-06-07 22:53:36 +02:00
< p > Scope: < b ng-click-select > {{ client.scope }}< / b > < / p >
< p > RedirectURI: < b ng-click-select > {{ client.redirectURI }}< / b > < / p >
< p > Client ID: < b ng-click-select > {{ client.id }}< / b > < / p >
2016-06-23 11:28:13 +02:00
< p ng-show = "client.clientSecret" style = "overflow: auto; white-space: nowrap;" > Client Secret: < b ng-click-select > {{ client.clientSecret }}< / b > < / p >
2016-06-07 22:53:36 +02:00
2016-06-08 16:48:27 -07:00
< br / >
< h4 class = "text-muted" > Tokens
< div class = "pull-right" >
2017-01-29 02:01:01 -08:00
< button class = "btn btn-xs btn-default" ng-click = "removeAccessTokens(client)" ng-disabled = "!client.activeTokens.length || client.busy" > < i class = "fa fa-circle-o-notch fa-spin" ng-show = "client.busy" > < / i > Revoke All< / button >
2016-06-08 16:48:27 -07:00
< button class = "btn btn-xs btn-primary btn-outline" ng-click = "tokenAdd.show(client)" > < i class = "fa fa-plus" > < / i > New Token< / button >
< / div >
< / h4 >
2016-06-07 22:53:36 +02:00
< hr / >
< p ng-repeat = "token in client.activeTokens" >
< b ng-click-select > {{ token.accessToken }}< / b > < button class = "btn btn-xs btn-danger pull-right" ng-click = "removeToken(client, token)" title = "Revoke Token" > < i class = "fa fa-trash-o" > < / i > < / button >
< / p >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
< / div >
<!-- Offset the footer -->
< br / > < br / >