angular-swagger-ui
Version:
AngularJS implementation of OpenAPI (aka Swagger) UI
7 lines • 9.51 kB
JavaScript
/*
* Orange angular-swagger-ui - v0.6.5
*
* (C) 2015 Orange, all right reserved
* MIT Licensed
*/
"use strict";angular.module("swaggerUiAuthorization",["swaggerUi","ui.bootstrap.modal"]).provider("swaggerUiAuth",function(){var a;this.configuration=function(b){return b&&(a=b),a},this.$get=["$q","$uibModal",function(b,c){return{configuration:function(b){return b&&(a=b),a},execute:function(d){var e=b.defer(),f=c.open({templateUrl:"templates/auth/modal-auth.html",controller:"SwaggerUiModalAuthCtrl",backdrop:"static",resolve:{securityDefinitions:function(){return d.securityDefinitions},authConfig:function(){return a}}});return f.result.then(function(){},function(){}),e.resolve(d),e.promise}}}]}).controller("SwaggerUiModalAuthCtrl",["$scope","$http","$window","securityDefinitions","authConfig",function(a,b,c,d,e){function f(){angular.forEach(d,function(b,c){b.authByLogin="basic"===b.type||"oauth2"===b.type&&"password"===b.flow,b.authByClientId="oauth2"===b.type&&["application","clientCredentials","accessCode","implicit"].indexOf(b.flow)>-1,b.authByClientSecret=b.authByClientId&&"implicit"!==b.flow,a.form[c]=a.form[c]||{};var d=e&&e[c]||null;switch(b.type){case"apiKey":a.form[c].apiKey=b.apiKey||d;break;case"oauth2":d=d||{},a.form[c].clientId=b.clientId||d.clientId,a.form[c].clientSecret=b.clientSecret||d.clientSecret,a.form[c].selectedScopes=b.selectedScopes||angular.copy(b.scopes),a.form[c].login=b.login||d.login,a.form[c].password=b.password||d.password;break;case"basic":d=d||{},a.form[c].login=b.login||d.login,a.form[c].password=b.password||d.password}})}function g(b){var c=d[b];c.apiKey=a.form[b].apiKey,c.valid=!0,a.inProgress=!1}function h(b){var c=d[b];c.login=a.form[b].login,c.password=a.form[b].password,c.tokenType="Basic",c.accessToken=btoa(c.login+":"+c.password),c.valid=!0,a.inProgress=!1}function i(b){var c=d[b];c.clientId=a.form[b].clientId,c.clientSecret=a.form[b].clientSecret,m(b,"grant_type=client_credentials",c.clientId,c.clientSecret)}function j(b){var c=d[b];n(c,"code",function(d){c.clientId=a.form[b].clientId,c.clientSecret=a.form[b].clientSecret,m(b,"grant_type=authorization_code&code="+d.code+"&redirect_uri="+d.redirectUrl,c.clientId,c.clientSecret)})}function k(b){var c=d[b];n(b,"token",function(b){c.tokenType=b.token_type,c.accessToken=b.access_token,c.valid=!0,a.inProgress=!1})}function l(b){var c=d[b];c.login=a.form[b].login,c.password=a.form[b].password,m(b,"grant_type=password",c.login,c.password)}function m(c,f,g,h){var i=d[c],j=e&&e[c]||null;b({method:"POST",url:i.tokenUrl,headers:{Authorization:"Basic "+btoa(g+":"+h),"Content-Type":"application/x-www-form-urlencoded"},data:f,params:j&&j.queryParams}).then(function(a){i.tokenType=a.data.token_type,i.accessToken=a.data.access_token,i.valid=!0})["catch"](function(b){a.inProgress=!1,a.error[c]="failed to get oauth access token: "+(b.message||b.status)})}function n(b,f,g){var h=[],i=d[b],j=e&&e[b]||null,k=e&&e.redirectUrl||null,l=btoa(new Date);if(h.push("response_type="+f),!k)return void(a.error[b]="No redirect URI defined");if(h.push("redirect_uri="+encodeURIComponent(k)),a.form[b].clientId&&h.push("client_id="+encodeURIComponent(a.form[b].clientId)),a.form[b].selectedScopes){var m=[];angular.forEach(a.form[b].selectedScopes,function(a,b){a===!0&&m.push(b)}),h.push("scope="+encodeURIComponent(m.join(j&&j.scopeSeparator||" ")))}h.push("state="+encodeURIComponent(l)),j&&j.queryParams&&angular.forEach(j.queryParams,function(a,b){h.push(b+"="+encodeURIComponent(a))}),c.redirectOauth2={state:l,redirectUrl:k,flow:i.flow,callback:g,error:function(c){a.error[b]=c.message}},c.open(i.authorizationUrl+"?"+h.join("&"))}a.form={},a.securityDefinitions=d,a.error={},a.authorize=function(b){var c=d[b];switch(a.inProgress=!0,a.error[b]=!1,c.type){case"apiKey":g(b);break;case"basic":h(b);break;case"oauth2":switch(c.flow){case"application":case"clientCredentials":i(b);break;case"accessCode":case"authorizationCode":j(b);break;case"implicit":k(b);break;case"password":l(b)}}},a.logout=function(b){var c=d[b];angular.forEach(["apiKey","clientId","clientSecret","login","password","selectedScopes","tokenType","accessToken"],function(a){delete c[a]}),c.valid=!1,a.form[b]={},a.error[b]=!1},f()}]).service("__swaggerUiAuthInit",["$q","swaggerUiAuth",function(a,b){this.execute=function(c){var d=a.defer(),e=b.configuration();return c&&c.openApiSpec&&e&&angular.forEach(c.openApiSpec.securityDefinitions,function(a,b){var c=e[b]||null;if(c)switch(a.type){case"apiKey":c.apiKey&&(a.apiKey=c.apiKey,a.valid=!0);break;case"basic":c.login&&c.password&&(a.tokenType="Basic",a.accessToken=btoa(c.login+":"+c.password),a.valid=!0)}}),d.resolve(c),d.promise}}]).run(["swaggerModules","swaggerUiAuth","__swaggerUiAuthInit",function(a,b,c){a.add(a.AUTH,b,1),a.add(a.BEFORE_DISPLAY,c,1)}]),angular.module("swaggerUiAuthorization").run(["$templateCache",function(a){a.put("templates/auth/modal-auth.html",'<div class="swagger-auth-modal"> <h3 swagger-translate="authAvailable"></h3> <div ng-repeat="(key,item) in securityDefinitions"> <hr> <h4 ng-if="item.name"><span ng-bind="item.name"></span> (<span ng-bind="item.type"></span>)</h4> <h4 ng-if="!item.name" ng-bind="item.type|swaggerTranslate"></h4> <form role="form" name="authForm" class="form-horizontal" ng-submit="authForm.$valid&&authorize(key)" autocomplete="off"> <div ng-if="item.type==\'apiKey\'"> <div class="form-group"> <label class="control-label col-xs-3" swagger-translate="authParamName"></label> <div class="col-xs-9"> <span class="form-control" ng-bind="item.name"></span> </div> </div> <div class="form-group"> <label class="control-label col-xs-3" swagger-translate="authParamType"></label> <div class="col-xs-9"> <span class="form-control" ng-bind="item.in"></span> </div> </div> <div class="form-group"> <label class="control-label col-xs-3" for="apiKey{{$index}}" swagger-translate="authParamValue"></label> <div class="col-xs-9"> <input class="form-control" id="apiKey{{$index}}" name="apiKey{{$index}}" type="{{item.valid?\'password\':\'text\'}}" ng-model="form[key].apiKey" autocomplete="off" required ng-read-only="item.valid"> </div> </div> </div> <div ng-if="item.authByLogin"> <div class="form-group"> <label class="control-label col-xs-3" for="login{{$index}}" swagger-translate="authLogin"></label> <div class="col-xs-9"> <input class="form-control col-xs-9" id="login{{$index}}" name="login{{$index}}" type="text" ng-model="form[key].login" autocomplete="off" required ng-read-only="item.valid"> </div> </div> <div class="form-group"> <label class="control-label col-xs-3" for="password{{$index}}" swagger-translate="authPassword"></label> <div class="col-xs-9"> <input class="form-control col-xs-9" id="password{{$index}}" name="password{{$index}}" type="password" ng-model="form[key].password" autocomplete="off" required ng-read-only="item.valid"> </div> </div> </div> <div ng-if="item.authByClientId"> <p ng-if="item.scopes.length>0" swagger-translate="authOAuthDesc"></p> <p ng-if="item.description" ng-bind="item.description"></p> <div class="form-group" ng-if="item.authorizationUrl"> <label class="control-label col-xs-3" swagger-translate="authAuthorizationUrl"></label> <div class="col-xs-9"> <span class="form-control text" ng-bind="item.authorizationUrl"></span> </div> </div> <div class="form-group"> <label class="control-label col-xs-3" swagger-translate="authFlow"></label> <div class="col-xs-9"> <span class="form-control text" ng-bind="item.flow"></span> </div> </div> <div class="form-group" ng-if="item.tokenUrl"> <label class="control-label col-xs-3" swagger-translate="authTokenUrl"></label> <div class="col-xs-9"> <span class="form-control text" ng-bind="item.tokenUrl"></span> </div> </div> <div class="form-group"> <label class="control-label col-xs-3" for="clientId{{$index}}" swagger-translate="authClientId"></label> <div class="col-xs-9"> <input class="form-control col-xs-9" id="clientId{{$index}}" name="clientId{{$index}}" type="text" ng-model="form[key].clientId" autocomplete="off" ng-read-only="item.valid"> </div> </div> <div class="form-group" ng-if="item.authByClientSecret"> <label class="control-label col-xs-3" for="clientSecret{{$index}}" swagger-translate="authClientSecret"></label> <div class="col-xs-9"> <input class="form-control col-xs-9" id="clientSecret{{$index}}" name="clientSecret{{$index}}" type="text" ng-model="form[key].clientSecret" autocomplete="off" ng-read-only="item.valid"> </div> </div> <div ng-if="item.scopes" class="form-group"> <label class="control-label col-xs-3" swagger-translate="authScopes"></label> <div class="col-xs-9"> <div class="checkbox" ng-repeat="(name,desc) in item.scopes"> <label for="scope{{$index}}_{{name}}" class="control-label"> <input type="checkbox" id="scope{{$index}}_{{name}}" name="scope{{$index}}_{{name}}" ng-disabled="item.valid" ng-model="form[key].selectedScopes[name]"> <span ng-bind="name"></span> </label> <div class="scope-desc" ng-bind="desc"></div> </div> </div> </div> </div> <p ng-if="error[key]" class="text-danger" ng-bind="error[key]"></p> <div class="form-group buttons"> <button class="btn btn-default" type="button" ng-disabled="inProgress" ng-click="$close()" swagger-translate="authDone"></button> <button class="btn btn-primary" type="submit" ng-disabled="inProgress" ng-if="!item.valid" swagger-translate="authAuthorize"></button> <button class="btn btn-primary" type="button" ng-if="item.valid" ng-click="logout(key)" swagger-translate="authLogout"></button> </div> </form> </div> </div>')}]);