Skip to content

Commit

Permalink
studio: refactor session details
Browse files Browse the repository at this point in the history
  • Loading branch information
shreeharsha-factly committed Jul 11, 2024
1 parent f4612ad commit 9252184
Show file tree
Hide file tree
Showing 18 changed files with 358 additions and 261 deletions.
79 changes: 41 additions & 38 deletions server/service/core/action/space/my.go
Original file line number Diff line number Diff line change
Expand Up @@ -80,60 +80,63 @@ func my(w http.ResponseWriter, r *http.Request) {
UserID: authCtx.UserID,
}).First(&spaceMember).Error

if err != nil && !(err == gorm.ErrRecordNotFound) {
if err != nil {
if err == gorm.ErrRecordNotFound {
continue
}
loggerx.Error(err)
errorx.Render(w, errorx.Parser(errorx.InternalServerError()))
return
}

if err != gorm.ErrRecordNotFound {
// check for space policies
var spacePolicies []model.Policy
config.DB.Model(&model.Policy{}).Where(&model.Policy{
SpaceID: space.ID,
}).Find(&spacePolicies)

policyIds := make([]uuid.UUID, 0)
for _, policy := range spacePolicies {
policyIds = append(policyIds, policy.ID)
}
// check for space policies
var spacePolicies []model.Policy
config.DB.Model(&model.Policy{}).Where(&model.Policy{
SpaceID: space.ID,
}).Find(&spacePolicies)

// check for user policies
var userPolicies []model.PolicyUser
config.DB.Model(&model.PolicyUser{}).Where("policy_id IN (?)", policyIds).Where(&model.PolicyUser{
UserID: authCtx.UserID,
}).Find(&userPolicies)
policyIds := make([]uuid.UUID, 0)
for _, policy := range spacePolicies {
policyIds = append(policyIds, policy.ID)
}

userAccessPolicies := make([]uuid.UUID, 0)
for _, policy := range userPolicies {
userAccessPolicies = append(userAccessPolicies, policy.PolicyID)
}
// check for user policies
var userPolicies []model.PolicyUser
config.DB.Model(&model.PolicyUser{}).Where("policy_id IN (?)", policyIds).Where(&model.PolicyUser{
UserID: authCtx.UserID,
}).Find(&userPolicies)

permissions := make([]premission, 0)
userAccessPolicies := make([]uuid.UUID, 0)
for _, policy := range userPolicies {
userAccessPolicies = append(userAccessPolicies, policy.PolicyID)
}

spacePermission := make([]model.Permission, 0)
permissions := make([]premission, 0)

config.DB.Model(&model.Permission{}).Where("policy_id IN ?", userAccessPolicies).Find(&spacePermission)
spacePermission := make([]model.Permission, 0)

resourceMap := make(map[string][]string)
config.DB.Model(&model.Permission{}).Where("policy_id IN ?", userAccessPolicies).Find(&spacePermission)

for _, permission := range spacePermission {
if _, found := resourceMap[permission.Resource]; !found {
resourceMap[permission.Resource] = make([]string, 0)
}
resourceMap[permission.Resource] = append(resourceMap[permission.Resource], permission.Action)
}
resourceMap := make(map[string][]string)

for key, value := range resourceMap {
permissions = append(permissions, premission{
Resource: key,
Actions: value,
})
for _, permission := range spacePermission {
if _, found := resourceMap[permission.Resource]; !found {
resourceMap[permission.Resource] = make([]string, 0)
}
spaceWithPermission.Permissions = permissions
resourceMap[permission.Resource] = append(resourceMap[permission.Resource], permission.Action)
}

organisation.Spaces = append(organisation.Spaces, spaceWithPermission)
for key, value := range resourceMap {
permissions = append(permissions, premission{
Resource: key,
Actions: value,
})
}
spaceWithPermission.Permissions = permissions

}
if authCtx.OrgsRole[org.ID] == "admin" || len(spaceWithPermission.Permissions) > 0 {
organisation.Spaces = append(organisation.Spaces, spaceWithPermission)
}

}
Expand Down
58 changes: 0 additions & 58 deletions studio/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 2 additions & 3 deletions studio/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,18 +17,17 @@
"@editorjs/quote": "^2.3.0",
"@editorjs/raw": "^2.1.2",
"@editorjs/table": "^1.2.2",
"@factly/scooter-claim": "^0.0.45",
"@factly/scooter-code-block": "^0.0.45",
"@factly/scooter-core": "^0.0.45",
"@factly/scooter-embed": "^0.0.45",
"@factly/scooter-table": "^0.0.45",
"@factly/scooter-claim": "^0.0.45",
"@monaco-editor/react": "4.4.6",
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.5.0",
"@testing-library/user-event": "^7.2.1",
"@uppy/google-drive": "^3.5.0",
"@uppy/image-editor": "^2.4.0",
"@zitadel/react": "^1.0.3",
"antd": "^5.0.4",
"axios": "^0.21.1",
"dayjs": "^1.11.6",
Expand Down Expand Up @@ -127,4 +126,4 @@
"path": "./node_modules/cz-conventional-changelog"
}
}
}
}
97 changes: 34 additions & 63 deletions studio/src/App.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable react-hooks/exhaustive-deps */
import React, { useEffect, useState } from 'react';
import './App.css';
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
Expand All @@ -8,97 +9,67 @@ import { extractV6RouteObject } from './config/routesConfig';
import { useDispatch, useSelector } from 'react-redux';
import { getFormats } from '../src/actions/formats';
import deepEqual from 'deep-equal';
import { createZitadelAuth } from '@zitadel/react';
import { login } from './utils/zitadel';
import { addErrorNotification } from './actions/notifications';
import { getSession } from './actions/session';

function App() {
const config = {
authority: window.REACT_APP_ZITADEL_AUTHORITY,
client_id: window.REACT_APP_ZITADEL_CLIENT_ID,
redirect_uri: window.REACT_APP_ZITADEL_REDIRECT_URI,
post_logout_redirect_uri: window.REACT_APP_ZITADEL_POST_LOGOUT_REDIRECT_URI,
scope: `openid profile email urn:zitadel:iam:user:metadata urn:zitadel:iam:user:resourceowner urn:zitadel:iam:org:project:id:zitadel:aud urn:zitadel:iam:org:project:${window.REACT_APP_ZITADEL_PROJECT_ID}:roles`,
response_type: 'code',
response_mode: 'query',
code_challenge_method: 'S256',
};
const [authenticated, setAuthenticated] = useState(null);
const [reloadFlag, setReloadFlag] = useState(false);
const dispatch = useDispatch();
const selected = useSelector((state) => state.spaces.selected);
const { formats } = useSelector((state) => {
const node = state.formats.req.find((item) => {
return deepEqual(item.query, { space_id: selected });

const { formats, selected, session } = useSelector(({ formats, spaces, session }) => {
const node = formats.req.find((item) => {
return deepEqual(item.query, { space_id: spaces.selected });
});
if (node) {
const formats = node.data.map((element) => state.formats.details[element]);
const article = formats.find((format) => format.slug === 'article');
const factcheck = formats.find((format) => format.slug === 'fact-check');
const formatDetails = node.data.map((element) => formats.details[element]);
const article = formatDetails.find((format) => format.slug === 'article');
const factcheck = formatDetails.find((format) => format.slug === 'fact-check');
if (article || factcheck) {
const format = {
factcheck: factcheck,
article: article,
loading: state.formats.loading,
loading: formats.loading,
};
return { formats: format };
return { formats: format, selected: spaces.selected, session };
}
}
return { formats: { loading: state.formats.loading } };
return { formats: { loading: formats.loading }, selected: spaces.selected, session };
});

useEffect(() => {
fetchFormats();
}, [dispatch, selected, reloadFlag]);

const zitadel = createZitadelAuth(config);

const login = () => {
zitadel.authorize();
};

const signout = () => {
zitadel.signout();
};

useEffect(() => {
zitadel.userManager.getUser().then((user) => {
if (user) {
setAuthenticated(true);
} else {
setAuthenticated(false);
checkAuthenticated();
}, []);

const checkAuthenticated = () => {
dispatch(getSession()).then((res) => {
if (!res.success) {
window.localStorage.setItem('return_to', window.location.href);
login().then((d) => {
if (d.error) {
dispatch(
addErrorNotification({
message: d.error,
}),
);
return;
}
window.location.href = d.authorizeURL;
});
}
});
}, [zitadel]);

useEffect(() => {
if (
!authenticated &&
!window.location.href.includes('redirect') &&
!window.localStorage.getItem(
'oidc.user:' +
window.REACT_APP_ZITADEL_AUTHORITY +
':' +
window.REACT_APP_ZITADEL_CLIENT_ID,
)
) {
window.localStorage.setItem('return_to', window.location.href);
login();
}
}, [authenticated]);
};

const fetchFormats = () => {
if (selected !== '') dispatch(getFormats({ space_id: selected }));
};

const router = createBrowserRouter(
extractV6RouteObject(
formats,
setReloadFlag,
reloadFlag,
authenticated,
setAuthenticated,
zitadel.userManager,
signout,
),
extractV6RouteObject(formats, setReloadFlag, reloadFlag, session),
);
return (
<div className="App">
Expand Down
Loading

0 comments on commit 9252184

Please sign in to comment.