Bootstrap copied BFF and local accounts with public Sendico contracts (#34)
This commit is contained in:
1 parent
67dc5b5b1e
commit
7062672a87
556 files changed
+42291
-777
No files matched your search
@@ -0,0 +1,88 @@
|
||||
// Adapted from Sendico's canonical Product policy seed; see PROVENANCE.md.
|
||||
// Run only against the SXCHNGE-owned database. This seeds descriptions only:
|
||||
// no users, organization, role grants or provider resources are created.
|
||||
const databaseName = process.env.SXCHNGE_MONGO_DATABASE || 'sxchnge';
|
||||
const targetDb = db.getSiblingDB(databaseName);
|
||||
const now = new Date();
|
||||
|
||||
const canonicalPolicies = [
|
||||
{
|
||||
_id: ObjectId('677a61569cf14638b34423e0'),
|
||||
name: 'Organization Settings',
|
||||
description: 'Access to organization settings',
|
||||
resourceTypes: ['organizations'],
|
||||
},
|
||||
{
|
||||
_id: ObjectId('67bb6ec0da91191ffeb47012'),
|
||||
name: 'Accounts',
|
||||
description: 'Access to accounts settings',
|
||||
resourceTypes: ['accounts'],
|
||||
},
|
||||
{
|
||||
_id: ObjectId('67b3d7bd452192e77a26b22d'),
|
||||
name: 'Roles',
|
||||
description: 'Access to roles management',
|
||||
resourceTypes: ['roles', 'policies'],
|
||||
},
|
||||
];
|
||||
|
||||
upsertCanonicalPolicies();
|
||||
|
||||
function builtInFilter(extra) {
|
||||
return Object.assign(
|
||||
{
|
||||
$or: [
|
||||
{ organizationRef: { $exists: false } },
|
||||
{ organizationRef: null },
|
||||
],
|
||||
},
|
||||
extra,
|
||||
);
|
||||
}
|
||||
|
||||
function upsertCanonicalPolicies() {
|
||||
const result = [];
|
||||
for (const entry of canonicalPolicies) {
|
||||
let existing = targetDb.policies.findOne({ _id: entry._id });
|
||||
if (!existing) {
|
||||
// Migration-created policies carry environment-specific ids.
|
||||
existing = targetDb.policies.findOne(
|
||||
builtInFilter({ resourceTypes: { $all: entry.resourceTypes } }),
|
||||
);
|
||||
}
|
||||
if (existing) {
|
||||
const patch = {};
|
||||
if (existing.name !== entry.name) patch.name = entry.name;
|
||||
if (existing.description !== entry.description) {
|
||||
patch.description = entry.description;
|
||||
}
|
||||
if (
|
||||
JSON.stringify(existing.resourceTypes || []) !==
|
||||
JSON.stringify(entry.resourceTypes)
|
||||
) {
|
||||
patch.resourceTypes = entry.resourceTypes;
|
||||
}
|
||||
if (Object.keys(patch).length > 0) {
|
||||
patch.updatedAt = now;
|
||||
targetDb.policies.updateOne({ _id: existing._id }, { $set: patch });
|
||||
print(`Patched built-in policy "${entry.name}" (${existing._id.toHexString()})`);
|
||||
} else {
|
||||
print(`Built-in policy "${entry.name}" is up to date`);
|
||||
}
|
||||
result.push({ entry, id: existing._id, inserted: false });
|
||||
continue;
|
||||
}
|
||||
|
||||
targetDb.policies.insertOne({
|
||||
_id: entry._id,
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
name: entry.name,
|
||||
description: entry.description,
|
||||
resourceTypes: entry.resourceTypes,
|
||||
});
|
||||
print(`Seeded built-in policy "${entry.name}" (${entry._id.toHexString()})`);
|
||||
result.push({ entry, id: entry._id, inserted: true });
|
||||
}
|
||||
return result;
|
||||
}
|
||||
Reference in new issue
Block a user