abp.swagger.js 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  1. var abp = abp || {};
  2. (function () {
  3. /* Swagger */
  4. abp.swagger = abp.swagger || {};
  5. abp.swagger.addAuthToken = function () {
  6. var authToken = abp.auth.getToken();
  7. if (!authToken) {
  8. return false;
  9. }
  10. var cookieAuth = new SwaggerClient.ApiKeyAuthorization(abp.auth.tokenHeaderName, 'Bearer ' + authToken, 'header');
  11. swaggerUi.api.clientAuthorizations.add('bearerAuth', cookieAuth);
  12. return true;
  13. }
  14. abp.swagger.addCsrfToken = function () {
  15. var csrfToken = abp.security.antiForgery.getToken();
  16. if (!csrfToken) {
  17. return false;
  18. }
  19. var csrfCookieAuth = new SwaggerClient.ApiKeyAuthorization(abp.security.antiForgery.tokenHeaderName, csrfToken, 'header');
  20. swaggerUi.api.clientAuthorizations.add(abp.security.antiForgery.tokenHeaderName, csrfCookieAuth);
  21. return true;
  22. }
  23. function addAntiForgeryTokenToXhr(xhr) {
  24. var antiForgeryToken = abp.security.antiForgery.getToken();
  25. if (antiForgeryToken) {
  26. xhr.setRequestHeader(abp.security.antiForgery.tokenHeaderName, antiForgeryToken);
  27. }
  28. }
  29. function loginUserInternal(tenantId, callback) {
  30. var usernameOrEmailAddress = document.getElementById('userName').value;
  31. if (!usernameOrEmailAddress) {
  32. alert('Username or Email Address is required, please try with a valid value !');
  33. return false;
  34. }
  35. var password = document.getElementById('password').value;
  36. if (!password) {
  37. alert('Password is required, please try with a valid value !');
  38. return false;
  39. }
  40. var xhr = new XMLHttpRequest();
  41. xhr.onreadystatechange = function () {
  42. if (xhr.readyState === XMLHttpRequest.DONE) {
  43. if (xhr.status === 200) {
  44. var responseJSON = JSON.parse(xhr.responseText);
  45. var result = responseJSON.result;
  46. var expireDate = new Date(Date.now() + (result.expireInSeconds * 1000));
  47. abp.auth.setToken(result.accessToken, expireDate);
  48. callback();
  49. } else {
  50. alert('Login failed !');
  51. }
  52. }
  53. };
  54. xhr.open('POST', '/api/TokenAuth/Authenticate', true);
  55. xhr.setRequestHeader('Abp.TenantId', tenantId);
  56. xhr.setRequestHeader('Content-type', 'application/json');
  57. addAntiForgeryTokenToXhr(xhr);
  58. xhr.send(
  59. JSON.stringify(
  60. { usernameOrEmailAddress: usernameOrEmailAddress, password: password }
  61. )
  62. );
  63. };
  64. abp.swagger.login = function (callback) {
  65. //Get TenantId first
  66. var tenancyName = document.getElementById('tenancyName').value;
  67. if (tenancyName) {
  68. var xhrTenancyName = new XMLHttpRequest();
  69. xhrTenancyName.onreadystatechange = function () {
  70. if (xhrTenancyName.readyState === XMLHttpRequest.DONE && xhrTenancyName.status === 200) {
  71. var responseJSON = JSON.parse(xhrTenancyName.responseText);
  72. var result = responseJSON.result;
  73. if (result.state === 1) { // Tenant exists and active.
  74. loginUserInternal(result.tenantId, callback); // Login for tenant
  75. } else {
  76. alert('There is no such tenant or tenant is not active !');
  77. }
  78. }
  79. };
  80. xhrTenancyName.open('POST', '/api/services/app/Account/IsTenantAvailable', true);
  81. xhrTenancyName.setRequestHeader('Content-type', 'application/json');
  82. addAntiForgeryTokenToXhr(xhrTenancyName);
  83. xhrTenancyName.send(
  84. JSON.stringify({ tenancyName: tenancyName })
  85. );
  86. } else {
  87. loginUserInternal(null, callback); // Login for host
  88. }
  89. };
  90. abp.swagger.logout = function () {
  91. abp.auth.clearToken();
  92. }
  93. abp.swagger.closeAuthDialog = function () {
  94. if (document.getElementById('abp-auth-dialog')) {
  95. document.getElementsByClassName("swagger-ui")[1].removeChild(document.getElementById('abp-auth-dialog'));
  96. }
  97. }
  98. abp.swagger.openAuthDialog = function (loginCallback) {
  99. abp.swagger.closeAuthDialog();
  100. var abpAuthDialog = document.createElement('div');
  101. abpAuthDialog.className = 'dialog-ux';
  102. abpAuthDialog.id = 'abp-auth-dialog';
  103. document.getElementsByClassName("swagger-ui")[1].appendChild(abpAuthDialog);
  104. // -- backdrop-ux
  105. var backdropUx = document.createElement('div');
  106. backdropUx.className = 'backdrop-ux';
  107. abpAuthDialog.appendChild(backdropUx);
  108. // -- modal-ux
  109. var modalUx = document.createElement('div');
  110. modalUx.className = 'modal-ux';
  111. abpAuthDialog.appendChild(modalUx);
  112. // -- -- modal-dialog-ux
  113. var modalDialogUx = document.createElement('div');
  114. modalDialogUx.className = 'modal-dialog-ux';
  115. modalUx.appendChild(modalDialogUx);
  116. // -- -- -- modal-ux-inner
  117. var modalUxInner = document.createElement('div');
  118. modalUxInner.className = 'modal-ux-inner';
  119. modalDialogUx.appendChild(modalUxInner);
  120. // -- -- -- -- modal-ux-header
  121. var modalUxHeader = document.createElement('div');
  122. modalUxHeader.className = 'modal-ux-header';
  123. modalUxInner.appendChild(modalUxHeader);
  124. var modalHeader = document.createElement('h3');
  125. modalHeader.innerText = 'Authorize';
  126. modalUxHeader.appendChild(modalHeader);
  127. // -- -- -- -- modal-ux-content
  128. var modalUxContent = document.createElement('div');
  129. modalUxContent.className = 'modal-ux-content';
  130. modalUxInner.appendChild(modalUxContent);
  131. modalUxContent.onkeydown = function (e) {
  132. if (e.keyCode === 13) {
  133. //try to login when user presses enter on authorize modal
  134. abp.swagger.login(loginCallback);
  135. }
  136. };
  137. //Inputs
  138. createInput(modalUxContent, 'tenancyName', 'Tenancy Name (Leave empty for Host)');
  139. createInput(modalUxContent, 'userName', 'Username or email address');
  140. createInput(modalUxContent, 'password', 'Password', 'password');
  141. //Buttons
  142. var authBtnWrapper = document.createElement('div');
  143. authBtnWrapper.className = 'auth-btn-wrapper';
  144. modalUxContent.appendChild(authBtnWrapper);
  145. //Close button
  146. var closeButton = document.createElement('button');
  147. closeButton.className = 'btn modal-btn auth btn-done button';
  148. closeButton.innerText = 'Close';
  149. closeButton.style.marginRight = '5px';
  150. closeButton.onclick = abp.swagger.closeAuthDialog;
  151. authBtnWrapper.appendChild(closeButton);
  152. //Authorize button
  153. var authorizeButton = document.createElement('button');
  154. authorizeButton.className = 'btn modal-btn auth authorize button';
  155. authorizeButton.innerText = 'Login';
  156. authorizeButton.onclick = function() {
  157. abp.swagger.login(loginCallback);
  158. };
  159. authBtnWrapper.appendChild(authorizeButton);
  160. }
  161. function createInput(container, id, title, type) {
  162. var wrapper = document.createElement('div');
  163. wrapper.className = 'wrapper';
  164. container.appendChild(wrapper);
  165. var label = document.createElement('label');
  166. label.innerText = title;
  167. wrapper.appendChild(label);
  168. var section = document.createElement('section');
  169. section.className = 'block-tablet col-10-tablet block-desktop col-10-desktop';
  170. wrapper.appendChild(section);
  171. var input = document.createElement('input');
  172. input.id = id;
  173. input.type = type ? type : 'text';
  174. input.style.width = '100%';
  175. section.appendChild(input);
  176. }
  177. })();