[ARVADOS-WORKBENCH2] updated: 1.3.0-72-gcda1081
Git user
git at public.curoverse.com
Fri Dec 7 05:05:30 EST 2018
Summary of changes:
src/index.tsx | 2 +
src/models/api-client-authorization.ts | 19 ++++
src/models/resource.ts | 4 +
src/routes/route-change-handlers.ts | 3 +
src/routes/routes.ts | 6 +-
.../api-client-authorization-service.ts | 14 +++
.../common-service/common-resource-service.ts | 126 +--------------------
...ommon-resource-service.ts => common-service.ts} | 88 +++++---------
src/services/favorite-service/favorite-service.ts | 2 +-
src/services/groups-service/groups-service.ts | 3 +-
.../permission-service/permission-service.ts | 3 +-
src/services/project-service/project-service.ts | 2 +-
src/services/services.ts | 3 +
src/store/advanced-tab/advanced-tab.ts | 52 ++++++++-
.../api-client-authorizations-actions.ts | 82 ++++++++++++++
.../api-client-authorizations-reducer.ts | 22 ++++
src/store/context-menu/context-menu-actions.ts | 13 +++
.../data-explorer-middleware-service.ts | 2 +-
src/store/navigation/navigation-action.ts | 2 +
.../project-panel-middleware-service.ts | 2 +-
.../search-results-middleware-service.ts | 2 +-
.../shared-with-me-middleware-service.ts | 2 +-
src/store/store.ts | 4 +-
src/store/users/user-panel-middleware-service.ts | 2 +-
.../virtual-machines/virtual-machines-actions.ts | 2 +-
.../virtual-machines/virtual-machines-reducer.ts | 2 +-
src/store/workbench/workbench-actions.ts | 6 +
.../workflow-panel/workflow-middleware-service.ts | 2 +-
.../attributes-dialog.tsx | 78 +++++++++++++
.../help-dialog.tsx | 66 +++++++++++
.../remove-dialog.tsx | 8 +-
...t.ts => api-client-authorization-action-set.ts} | 11 +-
src/views-components/context-menu/context-menu.tsx | 1 +
src/views-components/main-app-bar/account-menu.tsx | 6 +-
.../main-content-bar/main-content-bar.tsx | 4 +-
.../api-client-authorization-panel-root.tsx | 104 +++++++++++++++++
.../api-client-authorization-panel.tsx | 32 ++++++
.../compute-node-panel/compute-node-panel-root.tsx | 4 +-
.../virtual-machine-panel.tsx | 2 +-
src/views/workbench/workbench.tsx | 8 ++
40 files changed, 583 insertions(+), 213 deletions(-)
create mode 100644 src/models/api-client-authorization.ts
create mode 100644 src/services/api-client-authorization-service/api-client-authorization-service.ts
copy src/services/common-service/{common-resource-service.ts => common-service.ts} (58%)
create mode 100644 src/store/api-client-authorizations/api-client-authorizations-actions.ts
create mode 100644 src/store/api-client-authorizations/api-client-authorizations-reducer.ts
create mode 100644 src/views-components/api-client-authorizations-dialog/attributes-dialog.tsx
create mode 100644 src/views-components/api-client-authorizations-dialog/help-dialog.tsx
copy src/views-components/{ssh-keys-dialog => api-client-authorizations-dialog}/remove-dialog.tsx (59%)
copy src/views-components/context-menu/action-sets/{compute-node-action-set.ts => api-client-authorization-action-set.ts} (63%)
create mode 100644 src/views/api-client-authorization-panel/api-client-authorization-panel-root.tsx
create mode 100644 src/views/api-client-authorization-panel/api-client-authorization-panel.tsx
via cda10815df30e3bceec728535f426754ef8ff2e8 (commit)
via 282b04b762cf6366209074333bfd623e3cba58c5 (commit)
via 3865bd152892a1ad5f85f23d085268837db8c9ee (commit)
via eb8fb03156072ae7d9c289d8d7156fc2d94e40be (commit)
via 4e1ff9a1613f897f24bc59a981e94d8bf227fd10 (commit)
via d19d853e83383a6b75f638be99472aa626a05524 (commit)
from 7a6743eacc2ef5ce99ceca5acbaff8b00fb7e7d1 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
commit cda10815df30e3bceec728535f426754ef8ff2e8
Merge: 7a6743e 282b04b
Author: Pawel Kowalczyk <pawel.kowalczyk at contractors.roche.com>
Date: Fri Dec 7 11:05:13 2018 +0100
next conflicts
Feature #14504
Arvados-DCO-1.1-Signed-off-by: Pawel Kowalczyk <pawel.kowalczyk at contractors.roche.com>
diff --cc src/index.tsx
index 87af8f1,c33ef7c..8f702af
--- a/src/index.tsx
+++ b/src/index.tsx
@@@ -53,8 -53,8 +53,9 @@@ import { sshKeyActionSet } from '~/view
import { keepServiceActionSet } from '~/views-components/context-menu/action-sets/keep-service-action-set';
import { loadVocabulary } from '~/store/vocabulary/vocabulary-actions';
import { virtualMachineActionSet } from '~/views-components/context-menu/action-sets/virtual-machine-action-set';
+import { userActionSet } from '~/views-components/context-menu/action-sets/user-action-set';
import { computeNodeActionSet } from '~/views-components/context-menu/action-sets/compute-node-action-set';
+ import { apiClientAuthorizationActionSet } from '~/views-components/context-menu/action-sets/api-client-authorization-action-set';
console.log(`Starting arvados [${getBuildInfo()}]`);
@@@ -75,8 -75,8 +76,9 @@@ addMenuActionSet(ContextMenuKind.REPOSI
addMenuActionSet(ContextMenuKind.SSH_KEY, sshKeyActionSet);
addMenuActionSet(ContextMenuKind.VIRTUAL_MACHINE, virtualMachineActionSet);
addMenuActionSet(ContextMenuKind.KEEP_SERVICE, keepServiceActionSet);
+addMenuActionSet(ContextMenuKind.USER, userActionSet);
addMenuActionSet(ContextMenuKind.NODE, computeNodeActionSet);
+ addMenuActionSet(ContextMenuKind.API_CLIENT_AUTHORIZATION, apiClientAuthorizationActionSet);
fetchConfig()
.then(({ config, apiHost }) => {
diff --cc src/routes/route-change-handlers.ts
index 5b281b8,a733e42..e2454d6
--- a/src/routes/route-change-handlers.ts
+++ b/src/routes/route-change-handlers.ts
@@@ -31,8 -31,8 +31,9 @@@ const handleLocationChange = (store: Ro
const sshKeysMatch = Routes.matchSshKeysRoute(pathname);
const keepServicesMatch = Routes.matchKeepServicesRoute(pathname);
const computeNodesMatch = Routes.matchComputeNodesRoute(pathname);
+ const apiClientAuthorizationsMatch = Routes.matchApiClientAuthorizationsRoute(pathname);
const myAccountMatch = Routes.matchMyAccountRoute(pathname);
+ const userMatch = Routes.matchUsersRoute(pathname);
if (projectMatch) {
store.dispatch(WorkbenchActions.loadProject(projectMatch.params.id));
@@@ -66,9 -66,9 +67,11 @@@
store.dispatch(WorkbenchActions.loadKeepServices);
} else if (computeNodesMatch) {
store.dispatch(WorkbenchActions.loadComputeNodes);
+ } else if (apiClientAuthorizationsMatch) {
+ store.dispatch(WorkbenchActions.loadApiClientAuthorizations);
} else if (myAccountMatch) {
store.dispatch(WorkbenchActions.loadMyAccount);
+ }else if (userMatch) {
+ store.dispatch(WorkbenchActions.loadUsers);
}
};
diff --cc src/routes/routes.ts
index dabb9bf,7f15a8d..88dfd46
--- a/src/routes/routes.ts
+++ b/src/routes/routes.ts
@@@ -26,7 -26,7 +26,8 @@@ export const Routes =
MY_ACCOUNT: '/my-account',
KEEP_SERVICES: `/keep-services`,
COMPUTE_NODES: `/nodes`,
- USERS: '/users'
++ USERS: '/users',
+ API_CLIENT_AUTHORIZATIONS: `/api_client_authorizations`
};
export const getResourceUrl = (uuid: string) => {
@@@ -99,8 -99,8 +100,11 @@@ export const matchMyAccountRoute = (rou
export const matchKeepServicesRoute = (route: string) =>
matchPath(route, { path: Routes.KEEP_SERVICES });
+export const matchUsersRoute = (route: string) =>
+ matchPath(route, { path: Routes.USERS });
+
export const matchComputeNodesRoute = (route: string) =>
matchPath(route, { path: Routes.COMPUTE_NODES });
+
+ export const matchApiClientAuthorizationsRoute = (route: string) =>
- matchPath(route, { path: Routes.API_CLIENT_AUTHORIZATIONS });
++ matchPath(route, { path: Routes.API_CLIENT_AUTHORIZATIONS });
diff --cc src/store/advanced-tab/advanced-tab.ts
index 4da4d7e,a77ffcc..851eb94
--- a/src/store/advanced-tab/advanced-tab.ts
+++ b/src/store/advanced-tab/advanced-tab.ts
@@@ -74,8 -75,8 +75,9 @@@ enum ResourcePrefix
AUTORIZED_KEYS = 'authorized_keys',
VIRTUAL_MACHINES = 'virtual_machines',
KEEP_SERVICES = 'keep_services',
+ COMPUTE_NODES = 'nodes',
+ USERS = 'users',
- COMPUTE_NODES = 'nodes'
+ API_CLIENT_AUTHORIZATIONS = 'api_client_authorizations'
}
enum KeepServiceData {
@@@ -93,9 -89,14 +95,14 @@@ enum ComputeNodeData
PROPERTIES = 'properties'
}
- type AdvanceResourceKind = CollectionData | ProcessData | ProjectData | RepositoryData | SshKeyData | VirtualMachineData | KeepServiceData | ComputeNodeData | UserData;
+ enum ApiClientAuthorizationsData {
+ API_CLIENT_AUTHORIZATION = 'api_client_authorization',
+ DEFAULT_OWNER_UUID = 'default_owner_uuid'
+ }
+
-type AdvanceResourceKind = CollectionData | ProcessData | ProjectData | RepositoryData | SshKeyData | VirtualMachineData | KeepServiceData | ComputeNodeData | ApiClientAuthorizationsData;
++type AdvanceResourceKind = CollectionData | ProcessData | ProjectData | RepositoryData | SshKeyData | VirtualMachineData | KeepServiceData | ComputeNodeData | ApiClientAuthorizationsData | UserData;
type AdvanceResourcePrefix = GroupContentsResourcePrefix | ResourcePrefix;
- type AdvanceResponseData = ContainerRequestResource | ProjectResource | CollectionResource | RepositoryResource | SshKeyResource | VirtualMachinesResource | KeepServiceResource | NodeResource | UserResource | undefined;
-type AdvanceResponseData = ContainerRequestResource | ProjectResource | CollectionResource | RepositoryResource | SshKeyResource | VirtualMachinesResource | KeepServiceResource | NodeResource | ApiClientAuthorization | undefined;
++type AdvanceResponseData = ContainerRequestResource | ProjectResource | CollectionResource | RepositoryResource | SshKeyResource | VirtualMachinesResource | KeepServiceResource | NodeResource | ApiClientAuthorization | UserResource | undefined;
export const openAdvancedTabDialog = (uuid: string) =>
async (dispatch: Dispatch<any>, getState: () => RootState, services: ServiceRepository) => {
@@@ -539,4 -510,26 +561,26 @@@ const computeNodeApiResponse = (apiResp
"info": "${JSON.stringify(info, null, 4)}"`;
return response;
+ };
+
+ const apiClientAuthorizationApiResponse = (apiResponse: ApiClientAuthorization) => {
+ const {
- uuid, ownerUuid, apiToken, apiClientId, userId, createdByIpAddress, lastUsedByIpAddress,
++ uuid, ownerUuid, apiToken, apiClientId, userId, createdByIpAddress, lastUsedByIpAddress,
+ lastUsedAt, expiresAt, defaultOwnerUuid, scopes, updatedAt, createdAt
+ } = apiResponse;
+ const response = `"uuid": "${uuid}",
+ "owner_uuid": "${ownerUuid}",
+ "api_token": "${stringify(apiToken)}",
+ "api_client_id": "${stringify(apiClientId)}",
+ "user_id": "${stringify(userId)}",
+ "created_by_ip_address": "${stringify(createdByIpAddress)}",
+ "last_used_by_ip_address": "${stringify(lastUsedByIpAddress)}",
+ "last_used_at": "${stringify(lastUsedAt)}",
+ "expires_at": "${stringify(expiresAt)}",
+ "created_at": "${stringify(createdAt)}",
+ "updated_at": "${stringify(updatedAt)}",
+ "default_owner_uuid": "${stringify(defaultOwnerUuid)}",
+ "scopes": "${JSON.stringify(scopes, null, 4)}"`;
+
+ return response;
};
diff --cc src/store/navigation/navigation-action.ts
index bae1689,067a9ac..8d68a4b
--- a/src/store/navigation/navigation-action.ts
+++ b/src/store/navigation/navigation-action.ts
@@@ -74,4 -74,4 +74,6 @@@ export const navigateToKeepServices = p
export const navigateToComputeNodes = push(Routes.COMPUTE_NODES);
-export const navigateToApiClientAuthorizations = push(Routes.API_CLIENT_AUTHORIZATIONS);
+export const navigateToUsers = push(Routes.USERS);
++
++export const navigateToApiClientAuthorizations = push(Routes.API_CLIENT_AUTHORIZATIONS);
diff --cc src/store/project-panel/project-panel-middleware-service.ts
index 257fc04,f2cc8a9..58f1587
--- a/src/store/project-panel/project-panel-middleware-service.ts
+++ b/src/store/project-panel/project-panel-middleware-service.ts
@@@ -22,11 -22,11 +22,11 @@@ import { Dispatch, MiddlewareAPI } fro
import { ProjectResource } from "~/models/project";
import { updateResources } from "~/store/resources/resources-actions";
import { getProperty } from "~/store/properties/properties";
-import { snackbarActions, SnackbarKind } from '../snackbar/snackbar-actions';
+import { snackbarActions, SnackbarKind } from '~/store/snackbar/snackbar-actions';
import { progressIndicatorActions } from '~/store/progress-indicator/progress-indicator-actions.ts';
-import { DataExplorer, getDataExplorer } from '../data-explorer/data-explorer-reducer';
+import { DataExplorer, getDataExplorer } from '~/store/data-explorer/data-explorer-reducer';
- import { ListResults } from '~/services/common-service/common-resource-service';
+ import { ListResults } from '~/services/common-service/common-service';
-import { loadContainers } from '../processes/processes-actions';
+import { loadContainers } from '~/store/processes/processes-actions';
import { ResourceKind } from '~/models/resource';
import { getResource } from "~/store/resources/resources";
import { CollectionResource } from "~/models/collection";
diff --cc src/store/store.ts
index 1862d6f,eef0475..2b0ada8
--- a/src/store/store.ts
+++ b/src/store/store.ts
@@@ -46,9 -46,8 +46,10 @@@ import { resourcesDataReducer } from "~
import { virtualMachinesReducer } from "~/store/virtual-machines/virtual-machines-reducer";
import { repositoriesReducer } from '~/store/repositories/repositories-reducer';
import { keepServicesReducer } from '~/store/keep-services/keep-services-reducer';
+import { UserMiddlewareService } from '~/store/users/user-panel-middleware-service';
+import { USERS_PANEL_ID } from '~/store/users/users-actions';
import { computeNodesReducer } from '~/store/compute-nodes/compute-nodes-reducer';
+ import { apiClientAuthorizationsReducer } from '~/store/api-client-authorizations/api-client-authorizations-reducer';
const composeEnhancers =
(process.env.NODE_ENV === 'development' &&
diff --cc src/store/users/user-panel-middleware-service.ts
index 2f60209,2cd910b..bc4bb13
--- a/src/store/users/user-panel-middleware-service.ts
+++ b/src/store/users/user-panel-middleware-service.ts
@@@ -11,14 -11,14 +11,14 @@@ import { DataExplorer, getDataExplorer
import { updateResources } from '~/store/resources/resources-actions';
import { FilterBuilder } from '~/services/api/filter-builder';
import { SortDirection } from '~/components/data-table/data-column';
-import { WorkflowPanelColumnNames } from '~/views/workflow-panel/workflow-panel-view';
import { OrderDirection, OrderBuilder } from '~/services/api/order-builder';
- import { ListResults } from '~/services/common-service/common-resource-service';
-import { WorkflowResource } from '~/models/workflow';
+ import { ListResults } from '~/services/common-service/common-service';
-import { workflowPanelActions } from './workflow-panel-actions';
+import { userBindedActions } from '~/store/users/users-actions';
import { getSortColumn } from "~/store/data-explorer/data-explorer-reducer";
+import { UserResource } from '~/models/user';
+import { UserPanelColumnNames } from '~/views/user-panel/user-panel';
-export class WorkflowMiddlewareService extends DataExplorerMiddlewareService {
+export class UserMiddlewareService extends DataExplorerMiddlewareService {
constructor(private services: ServiceRepository, id: string) {
super(id);
}
diff --cc src/store/workbench/workbench-actions.ts
index d33bdaf,fdc91f4..bc5eac6
--- a/src/store/workbench/workbench-actions.ts
+++ b/src/store/workbench/workbench-actions.ts
@@@ -58,9 -58,8 +58,10 @@@ import { searchResultsPanelColumns } fr
import { loadVirtualMachinesPanel } from '~/store/virtual-machines/virtual-machines-actions';
import { loadRepositoriesPanel } from '~/store/repositories/repositories-actions';
import { loadKeepServicesPanel } from '~/store/keep-services/keep-services-actions';
+import { loadUsersPanel, userBindedActions } from '~/store/users/users-actions';
+import { userPanelColumns } from '~/views/user-panel/user-panel';
import { loadComputeNodesPanel } from '~/store/compute-nodes/compute-nodes-actions';
+ import { loadApiClientAuthorizationsPanel } from '~/store/api-client-authorizations/api-client-authorizations-actions';
export const WORKBENCH_LOADING_SCREEN = 'workbenchLoadingScreen';
diff --cc src/store/workflow-panel/workflow-middleware-service.ts
index 000e9f5,2cd910b..6dbcf6a
--- a/src/store/workflow-panel/workflow-middleware-service.ts
+++ b/src/store/workflow-panel/workflow-middleware-service.ts
@@@ -14,8 -14,8 +14,8 @@@ import { SortDirection } from '~/compon
import { WorkflowPanelColumnNames } from '~/views/workflow-panel/workflow-panel-view';
import { OrderDirection, OrderBuilder } from '~/services/api/order-builder';
import { WorkflowResource } from '~/models/workflow';
- import { ListResults } from '~/services/common-service/common-resource-service';
+ import { ListResults } from '~/services/common-service/common-service';
-import { workflowPanelActions } from './workflow-panel-actions';
+import { workflowPanelActions } from '~/store/workflow-panel/workflow-panel-actions';
import { getSortColumn } from "~/store/data-explorer/data-explorer-reducer";
export class WorkflowMiddlewareService extends DataExplorerMiddlewareService {
diff --cc src/views-components/main-app-bar/account-menu.tsx
index 412f849,415cba3..44b113d
--- a/src/views-components/main-app-bar/account-menu.tsx
+++ b/src/views-components/main-app-bar/account-menu.tsx
@@@ -12,9 -12,11 +12,12 @@@ import { logout } from '~/store/auth/au
import { RootState } from "~/store/store";
import { openCurrentTokenDialog } from '~/store/current-token-dialog/current-token-dialog-actions';
import { openRepositoriesPanel } from "~/store/repositories/repositories-actions";
- import { navigateToSshKeys, navigateToKeepServices, navigateToComputeNodes, navigateToMyAccount } from '~/store/navigation/navigation-action';
+ import {
+ navigateToSshKeys, navigateToKeepServices, navigateToComputeNodes,
+ navigateToApiClientAuthorizations, navigateToMyAccount
+ } from '~/store/navigation/navigation-action';
import { openVirtualMachines } from "~/store/virtual-machines/virtual-machines-actions";
+import { navigateToUsers } from '~/store/navigation/navigation-action';
interface AccountMenuProps {
user?: User;
@@@ -38,7 -40,7 +41,8 @@@ export const AccountMenu = connect(mapS
<MenuItem onClick={() => dispatch(openRepositoriesPanel())}>Repositories</MenuItem>
<MenuItem onClick={() => dispatch(openCurrentTokenDialog)}>Current token</MenuItem>
<MenuItem onClick={() => dispatch(navigateToSshKeys)}>Ssh Keys</MenuItem>
+ <MenuItem onClick={() => dispatch(navigateToUsers)}>Users</MenuItem>
+ { user.isAdmin && <MenuItem onClick={() => dispatch(navigateToApiClientAuthorizations)}>Api Tokens</MenuItem> }
{ user.isAdmin && <MenuItem onClick={() => dispatch(navigateToKeepServices)}>Keep Services</MenuItem> }
{ user.isAdmin && <MenuItem onClick={() => dispatch(navigateToComputeNodes)}>Compute Nodes</MenuItem> }
<MenuItem onClick={() => dispatch(navigateToMyAccount)}>My account</MenuItem>
diff --cc src/views-components/main-content-bar/main-content-bar.tsx
index 7022fc5,a3279e3..8c2e4ce
--- a/src/views-components/main-content-bar/main-content-bar.tsx
+++ b/src/views-components/main-content-bar/main-content-bar.tsx
@@@ -20,8 -20,8 +20,8 @@@ const isButtonVisible = ({ router }: Ro
const pathname = router.location ? router.location.pathname : '';
return !Routes.matchWorkflowRoute(pathname) && !Routes.matchVirtualMachineRoute(pathname) &&
!Routes.matchRepositoriesRoute(pathname) && !Routes.matchSshKeysRoute(pathname) &&
- !Routes.matchKeepServicesRoute(pathname) && !Routes.matchComputeNodesRoute(pathname) &&
- !Routes.matchUsersRoute(pathname);
+ !Routes.matchKeepServicesRoute(pathname) && !Routes.matchComputeNodesRoute(pathname) &&
- !Routes.matchApiClientAuthorizationsRoute(pathname);
++ !Routes.matchApiClientAuthorizationsRoute(pathname) && !Routes.matchUsersRoute(pathname);
};
export const MainContentBar = connect((state: RootState) => ({
diff --cc src/views/workbench/workbench.tsx
index e0ec14f,3cd040f..70f2a2d
--- a/src/views/workbench/workbench.tsx
+++ b/src/views/workbench/workbench.tsx
@@@ -68,9 -71,7 +71,10 @@@ import { AttributesComputeNodeDialog }
import { AttributesKeepServiceDialog } from '~/views-components/keep-services-dialog/attributes-dialog';
import { AttributesSshKeyDialog } from '~/views-components/ssh-keys-dialog/attributes-dialog';
import { VirtualMachineAttributesDialog } from '~/views-components/virtual-machines-dialog/attributes-dialog';
+import { UserPanel } from '~/views/user-panel/user-panel';
+import { UserAttributesDialog } from '~/views-components/user-dialog/attributes-dialog';
+import { CreateUserDialog } from '~/views-components/dialog-forms/create-user-dialog';
+ import { HelpApiClientAuthorizationDialog } from '~/views-components/api-client-authorizations-dialog/help-dialog';
type CssRules = 'root' | 'container' | 'splitter' | 'asidePanel' | 'contentWrapper' | 'content';
@@@ -144,8 -145,8 +148,9 @@@ export const WorkbenchPanel
<Route path={Routes.REPOSITORIES} component={RepositoriesPanel} />
<Route path={Routes.SSH_KEYS} component={SshKeyPanel} />
<Route path={Routes.KEEP_SERVICES} component={KeepServicePanel} />
+ <Route path={Routes.USERS} component={UserPanel} />
<Route path={Routes.COMPUTE_NODES} component={ComputeNodePanel} />
+ <Route path={Routes.API_CLIENT_AUTHORIZATIONS} component={ApiClientAuthorizationPanel} />
<Route path={Routes.MY_ACCOUNT} component={MyAccountPanel} />
</Switch>
</Grid>
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list