actions.ts 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. import { actionCreatorFactory, noPayloadActionCreatorFactory } from 'app/core/redux';
  2. import config from 'app/core/config';
  3. import { ThunkResult, SyncInfo, LdapUser, LdapConnectionInfo, LdapError, UserSession, User } from 'app/types';
  4. import {
  5. getUserInfo,
  6. getLdapState,
  7. syncLdapUser,
  8. getUser,
  9. getUserSessions,
  10. revokeUserSession,
  11. revokeAllUserSessions,
  12. getLdapSyncStatus,
  13. } from './apis';
  14. // Action types
  15. export const ldapConnectionInfoLoadedAction = actionCreatorFactory<LdapConnectionInfo>(
  16. 'ldap/CONNECTION_INFO_LOADED'
  17. ).create();
  18. export const ldapSyncStatusLoadedAction = actionCreatorFactory<SyncInfo>('ldap/SYNC_STATUS_LOADED').create();
  19. export const userMappingInfoLoadedAction = actionCreatorFactory<LdapUser>('ldap/USER_INFO_LOADED').create();
  20. export const userMappingInfoFailedAction = actionCreatorFactory<LdapError>('ldap/USER_INFO_FAILED').create();
  21. export const clearUserMappingInfoAction = noPayloadActionCreatorFactory('ldap/CLEAR_USER_MAPPING_INFO').create();
  22. export const clearUserErrorAction = noPayloadActionCreatorFactory('ldap/CLEAR_USER_ERROR').create();
  23. export const ldapFailedAction = actionCreatorFactory<LdapError>('ldap/LDAP_FAILED').create();
  24. export const userLoadedAction = actionCreatorFactory<User>('USER_LOADED').create();
  25. export const userSessionsLoadedAction = actionCreatorFactory<UserSession[]>('USER_SESSIONS_LOADED').create();
  26. export const userSyncFailedAction = noPayloadActionCreatorFactory('USER_SYNC_FAILED').create();
  27. export const revokeUserSessionAction = noPayloadActionCreatorFactory('REVOKE_USER_SESSION').create();
  28. export const revokeAllUserSessionsAction = noPayloadActionCreatorFactory('REVOKE_ALL_USER_SESSIONS').create();
  29. // Actions
  30. export function loadLdapState(): ThunkResult<void> {
  31. return async dispatch => {
  32. try {
  33. const connectionInfo = await getLdapState();
  34. dispatch(ldapConnectionInfoLoadedAction(connectionInfo));
  35. } catch (error) {
  36. const ldapError = {
  37. title: error.data.message,
  38. body: error.data.error,
  39. };
  40. dispatch(ldapFailedAction(ldapError));
  41. }
  42. };
  43. }
  44. export function loadLdapSyncStatus(): ThunkResult<void> {
  45. return async dispatch => {
  46. if (config.buildInfo.isEnterprise) {
  47. // Available only in enterprise
  48. const syncStatus = await getLdapSyncStatus();
  49. dispatch(ldapSyncStatusLoadedAction(syncStatus));
  50. }
  51. };
  52. }
  53. export function loadUserMapping(username: string): ThunkResult<void> {
  54. return async dispatch => {
  55. try {
  56. const userInfo = await getUserInfo(username);
  57. dispatch(userMappingInfoLoadedAction(userInfo));
  58. } catch (error) {
  59. const userError = {
  60. title: error.data.message,
  61. body: error.data.error,
  62. };
  63. dispatch(clearUserMappingInfoAction());
  64. dispatch(userMappingInfoFailedAction(userError));
  65. }
  66. };
  67. }
  68. export function clearUserError(): ThunkResult<void> {
  69. return dispatch => {
  70. dispatch(clearUserErrorAction());
  71. };
  72. }
  73. export function clearUserMappingInfo(): ThunkResult<void> {
  74. return dispatch => {
  75. dispatch(clearUserErrorAction());
  76. dispatch(clearUserMappingInfoAction());
  77. };
  78. }
  79. export function syncUser(userId: number): ThunkResult<void> {
  80. return async dispatch => {
  81. try {
  82. await syncLdapUser(userId);
  83. dispatch(loadLdapUserInfo(userId));
  84. dispatch(loadLdapSyncStatus());
  85. } catch (error) {
  86. dispatch(userSyncFailedAction());
  87. }
  88. };
  89. }
  90. export function loadLdapUserInfo(userId: number): ThunkResult<void> {
  91. return async dispatch => {
  92. try {
  93. const user = await getUser(userId);
  94. dispatch(userLoadedAction(user));
  95. dispatch(loadUserSessions(userId));
  96. dispatch(loadUserMapping(user.login));
  97. } catch (error) {
  98. const userError = {
  99. title: error.data.message,
  100. body: error.data.error,
  101. };
  102. dispatch(userMappingInfoFailedAction(userError));
  103. }
  104. };
  105. }
  106. export function loadUserSessions(userId: number): ThunkResult<void> {
  107. return async dispatch => {
  108. const sessions = await getUserSessions(userId);
  109. dispatch(userSessionsLoadedAction(sessions));
  110. };
  111. }
  112. export function revokeSession(tokenId: number, userId: number): ThunkResult<void> {
  113. return async dispatch => {
  114. await revokeUserSession(tokenId, userId);
  115. dispatch(loadUserSessions(userId));
  116. };
  117. }
  118. export function revokeAllSessions(userId: number): ThunkResult<void> {
  119. return async dispatch => {
  120. await revokeAllUserSessions(userId);
  121. dispatch(loadUserSessions(userId));
  122. };
  123. }