Skip to content

Commit

Permalink
New 9.0.0-SNAPSHOT version with PdP datasource removed
Browse files Browse the repository at this point in the history
  • Loading branch information
oharsta committed Jan 15, 2025
1 parent ca39fd9 commit 2f5bd68
Show file tree
Hide file tree
Showing 10 changed files with 69 additions and 367 deletions.
2 changes: 1 addition & 1 deletion manage-gui/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<parent>
<groupId>org.openconext</groupId>
<artifactId>manage</artifactId>
<version>8.0.4-SNAPSHOT</version>
<version>9.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down
16 changes: 0 additions & 16 deletions manage-gui/src/api/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -309,22 +309,6 @@ export function getAllowedLoas() {
return fetchJson("loas");
}

export function getPdPPolicies() {
return fetchJson("pdp/policies");
}

export function getMigratedPdPPolicies() {
return fetchJson("pdp/migrated_policies");
}

export function getPolicyPushAnalysis() {
return fetchJson("/pdp/push_analysis");
}

export function importPdPPolicies() {
return postPutJson("pdp/import_policies", {}, "PUT")
}

export function getPlaygroundPolicies() {
return search({ALL_ATTRIBUTES: true}, "policy")
}
Expand Down
114 changes: 6 additions & 108 deletions manage-gui/src/pages/Policies.jsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import React from "react";
import I18n from "i18n-js";
import {isEmpty, stop} from "../utils/Utils";
import {stop} from "../utils/Utils";
import "./Policies.scss";
import {getPolicyPushAnalysis, importPdPPolicies} from "../api";
import PolicyPlayground from "../components/PolicyPlaygound";
import withRouterHooks from "../utils/RouterBackwardCompatability";
import PolicyMissingEnforcements from "../components/PolicyMissingEnforcements";
Expand All @@ -11,14 +10,14 @@ class Policies extends React.PureComponent {

constructor(props) {
super(props);
const tabs = ["import", "push", "playground", "missing_enforcements"];
const {tab = "import"} = props.params || {};
const tabs = ["playground", "missing_enforcements"];
const {tab = "playground"} = props.params || {};
this.state = {
tabs: tabs,
selectedTab: tab,
importResults: {},
showMoreImported: false,
policyPushAnalysis: {differences:[], missing_policies:[]},
policyPushAnalysis: {differences: [], missing_policies: []},
loading: false,
copiedToClipboardClassName: "",
};
Expand All @@ -34,12 +33,7 @@ class Policies extends React.PureComponent {

initialState = e => {
stop(e);
this.setState({loading: true});
getPolicyPushAnalysis()
.then(res => this.setState({
policyPushAnalysis: res,
loading: false
}));
this.setState({loading: false});
}

switchTab = tab => e => {
Expand All @@ -54,109 +48,16 @@ class Policies extends React.PureComponent {
pdpMigratedPolicies: []
});
}
if (tab === "push") {
this.setState({loading: true});
getPolicyPushAnalysis()
.then(res => this.setState({
policyPushAnalysis: res,
loading: false
}));
}
this.props.navigate(`/policies/${tab}`);
};

toggleShowMore = e => {
stop(e);
this.setState({showMoreImported: !this.state.showMoreImported})
}

renderTab = (tab, selectedTab) =>
<span key={tab}
className={tab === selectedTab ? "active" : ""}
onClick={this.switchTab(tab)}>
{I18n.t(`policies.${tab}`)}
</span>;

runImport = () => {
this.setState({loading: true});
importPdPPolicies()
.then(res => this.setState({importResults: res, loading: false}))
}

renderImport = () => {
const {importResults, showMoreImported, loading} = this.state;
return (
<section className="import">
<p>Import the current PdP policies into Manage. Once imported they can be pushed.</p>
<a className={`button ${loading ? "grey disabled" : "green"}`}
onClick={this.runImport}>
{I18n.t("policies.runImport")}
</a>
{!isEmpty(importResults) &&
<section className="results">
<h2>Not imported policies</h2>
<ul className="policies">
{importResults.errors.map((data, index) =>
<li key={index}>
<span>{data.name}</span>
<span>{data.error}</span>
</li>)}
</ul>
<h2>Imported policies</h2>
<a href={"/#show"}
onClick={this.toggleShowMore}>
{!showMoreImported ? "Show all" : "Hide"}
</a>
{showMoreImported && <ul className="policies">
{importResults.imported.map((metaData, index) =>
<li key={index}>
<span>{metaData.data.name}</span>
<span>{metaData.data.description}</span>
</li>)}
</ul>}
</section>}
</section>
);
};

renderPush = () => {
const {policyPushAnalysis, loading} = this.state;
return (
<section className="import">
<p>After importing the current PdP policies into Manage and subsequently pushing those Manage policies
to PdP, we now compare the original PdP policies with the pushed ones.</p>
<a className={`button ${loading ? "grey disabled" : "green"}`}
onClick={e => this.initialState(e)}>
{I18n.t("policies.reload")}
</a>
<section className="results">
<h2># Total PDP policies </h2>
<p>{policyPushAnalysis.policy_count}</p>
<h2># Total active PDP policies </h2>
<p>{policyPushAnalysis.active_policy_count}</p>
<h2># Pushed policies</h2>
<p>{policyPushAnalysis.migrated_policy_count}</p>
<h2>Missing policies</h2>
{policyPushAnalysis.missing_policies.length === 0 && <p>None missing</p>}
<ul className="policies">
{policyPushAnalysis.missing_policies.map((policy, index) => <li key={index}>
<span>{policy.name}</span>
<span>{policy.description}</span>
</li>)}
</ul>
<h2>Diffs between policies</h2>
{policyPushAnalysis.differences.length === 0 && <p>No diffs</p>}
<ul className="policies">
{policyPushAnalysis.differences.map((diff, index) => <li key={index}>
<span>{Object.keys(diff)[0]}</span>
<span>{Object.values(diff)[0]}</span>
</li>)}
</ul>
</section>
</section>
);
};

renderPlayground = () => {
return (
<PolicyPlayground/>
Expand All @@ -171,10 +72,6 @@ class Policies extends React.PureComponent {

renderCurrentTab = selectedTab => {
switch (selectedTab) {
case "import" :
return this.renderImport();
case "push" :
return this.renderPush();
case "playground" :
return this.renderPlayground();
case "missing_enforcements" :
Expand All @@ -199,4 +96,5 @@ class Policies extends React.PureComponent {
);
}
}

export default withRouterHooks(Policies);
16 changes: 1 addition & 15 deletions manage-server/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<parent>
<groupId>org.openconext</groupId>
<artifactId>manage</artifactId>
<version>8.0.4-SNAPSHOT</version>
<version>9.0.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

Expand Down Expand Up @@ -62,20 +62,6 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>3.3.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
Expand Down
42 changes: 31 additions & 11 deletions manage-server/src/main/java/manage/control/MetaDataController.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,7 @@
import javax.xml.stream.XMLStreamException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;

import static manage.api.Scope.TEST;
import static manage.mongo.MongoChangelog.CHANGE_REQUEST_POSTFIX;
Expand Down Expand Up @@ -115,7 +112,7 @@ public List<StatsEntry> stats(FederatedUser user) {
@PreAuthorize("hasAnyRole('WRITE_SP', 'WRITE_IDP', 'SYSTEM')")
@PostMapping("/internal/metadata")
public MetaData postInternal(@Validated @RequestBody MetaData metaData, APIUser apiUser) {
ScopeEnforcer.enforceWriteScope(apiUser, EntityType.fromType(metaData.getType()) );
ScopeEnforcer.enforceWriteScope(apiUser, EntityType.fromType(metaData.getType()));
return metaDataService.doPost(metaData, apiUser, !apiUser.getScopes().contains(TEST));
}

Expand Down Expand Up @@ -233,16 +230,39 @@ public MetaData put(@Validated @RequestBody MetaData metaData, FederatedUser use
@Transactional
public MetaData putInternal(@Validated @RequestBody MetaData metaData, APIUser apiUser)
throws JsonProcessingException {
ScopeEnforcer.enforceWriteScope(apiUser, EntityType.fromType(metaData.getType()) );
ScopeEnforcer.enforceWriteScope(apiUser, EntityType.fromType(metaData.getType()));
return metaDataService.doPut(metaData, apiUser, !apiUser.getScopes().contains(TEST));
}

@PreAuthorize("hasAnyRole('SYSTEM')")
@PutMapping("/internal/removeExtraneousKeys/{type}")
@Transactional
public ResponseEntity<List<String>> removeExtraneousKeys(@PathVariable("type") String type, @RequestBody List<String> extraneousKeys, APIUser apiUser) {
LOG.info("RemoveExtraneousKeys called by {}", apiUser.getName());

List<String> results = new ArrayList<>();
List<MetaData> metaDataEntries = metaDataRepository.findAllByType(type);
metaDataEntries.forEach(metaData -> {
Map<String, Object> metaDataFields = metaData.metaDataFields();
Set<String> keySet = metaDataFields.keySet();
if (keySet.stream().anyMatch(key -> extraneousKeys.contains(key))) {
keySet.removeIf(key -> extraneousKeys.contains(key));

LOG.info(String.format("Saving %s metadata where extraneousKeys are removed", metaData.getData().get("entityid")));

metaDataRepository.update(metaData);
results.add((String) metaData.getData().get("entityid"));
}
});
return ResponseEntity.ok(results);
}

@PreAuthorize("hasAnyRole('WRITE_SP', 'WRITE_IDP', 'SYSTEM')")
@PutMapping("/internal/delete-metadata-key")
@Transactional
public List<String> deleteMetaDataKey(@Validated @RequestBody MetaDataKeyDelete metaDataKeyDelete,
APIUser apiUser) throws IOException {
ScopeEnforcer.enforceWriteScope(apiUser, EntityType.fromType(metaDataKeyDelete.getType()) );
ScopeEnforcer.enforceWriteScope(apiUser, EntityType.fromType(metaDataKeyDelete.getType()));
return metaDataService.deleteMetaDataKey(metaDataKeyDelete, apiUser);
}

Expand All @@ -251,7 +271,7 @@ public List<String> deleteMetaDataKey(@Validated @RequestBody MetaDataKeyDelete
@Transactional
public MetaData update(@Validated @RequestBody MetaDataUpdate metaDataUpdate, APIUser apiUser)
throws JsonProcessingException {
ScopeEnforcer.enforceWriteScope(apiUser, EntityType.fromType(metaDataUpdate.getType()) );
ScopeEnforcer.enforceWriteScope(apiUser, EntityType.fromType(metaDataUpdate.getType()));
return metaDataService
.doMergeUpdate(metaDataUpdate, apiUser, "Internal API merge", true)
.get();
Expand All @@ -269,7 +289,7 @@ public List<MetaDataChangeRequest> changeRequests(@PathVariable("type") String t
public List<MetaDataChangeRequest> internalChangeRequests(@PathVariable("type") String type,
@PathVariable("metaDataId") String metaDataId,
APIUser apiUser) {
ScopeEnforcer.enforceChangeRequestScope(apiUser, EntityType.fromType(type) );
ScopeEnforcer.enforceChangeRequestScope(apiUser, EntityType.fromType(type));
return metaDataRepository.changeRequests(metaDataId, type.concat(CHANGE_REQUEST_POSTFIX));
}

Expand All @@ -290,7 +310,7 @@ public long openChangeRequests() {
@PostMapping("internal/change-requests")
@Transactional
public MetaDataChangeRequest changeRequestInternal(@Validated @RequestBody MetaDataChangeRequest metaDataChangeRequest, APIUser apiUser) throws JsonProcessingException {
ScopeEnforcer.enforceChangeRequestScope(apiUser, EntityType.fromType(metaDataChangeRequest.getType()) );
ScopeEnforcer.enforceChangeRequestScope(apiUser, EntityType.fromType(metaDataChangeRequest.getType()));
return metaDataService.doChangeRequest(metaDataChangeRequest, apiUser);
}

Expand Down Expand Up @@ -335,7 +355,7 @@ public DeleteResult removeChangeRequest(@PathVariable("type") String type,
@PutMapping("/internal/change-requests/reject")
@Transactional
public MetaData internalRejectChangeRequest(@RequestBody @Validated ChangeRequest changeRequest, APIUser apiUser) {
ScopeEnforcer.enforceChangeRequestScope(apiUser, EntityType.fromType(changeRequest.getType()) );
ScopeEnforcer.enforceChangeRequestScope(apiUser, EntityType.fromType(changeRequest.getType()));
return metaDataService.doRejectChangeRequest(changeRequest, apiUser);
}

Expand Down
Loading

0 comments on commit 2f5bd68

Please sign in to comment.