Files
hereconnect/services/db-migrations/migrations/1732483677017-dbs.js
T
ti 4210436ca2
Deploy db-migrations / db-migrations (push) Successful in 36s
fix url
2024-12-03 17:32:50 +02:00

94 lines
2.3 KiB
JavaScript

import { fetch } from "pouchdb-fetch";
const dbsSecurity = {
_users: {
admins: { roles: ["_admin"] },
members: { roles: ["_admin"] },
},
_replicator: {
admins: { roles: ["_admin"] },
members: { roles: ["_admin"] },
},
_global_changes: {
admins: { roles: ["_admin"] },
members: { roles: ["_admin"] },
},
server_settings: {
admins: { roles: ["_admin"] },
members: { roles: ["_admin"] },
},
web_push_subscriptions: {
admins: { roles: ["_admin"] },
members: { roles: [] },
},
messages: {
admins: { roles: ["_admin"] },
members: { roles: [] },
},
qr: {
admins: { roles: ["_admin"] },
members: { roles: [] },
},
public_settings: {
admins: { roles: ["_admin"] },
members: { roles: [] },
},
user_chat_settings: {
admins: { roles: ["_admin"] },
members: { roles: [] },
},
};
if (!process.env.API_URL) {
throw new Error("Environment variable API_URL is not set");
}
const urlObject = new URL(process.env.API_URL);
const headers = {
"Content-Type": "application/json",
Authorization: "Basic " + btoa(`${urlObject.username}:${urlObject.password}`),
};
const getUrl = (dbUrlPath) => {
return `${dbObject.protocol}//${urlObject.host}${urlObject.pathname}${dbUrlPath}${urlObject.search}${urlObject.hash}`;
};
export const up = async () => {
for (const [dbName, dbSecurity] of Object.entries(dbsSecurity)) {
const responseCreateDb = await fetch(getUrl(dbName), {
method: "PUT",
headers,
}).then((response) => response.json());
if (!responseCreateDb.ok) {
throw new Error(
`${dbName} security error ${JSON.stringify(responseCreateDb)}`,
);
}
const responseSetSecurity = await fetch(getUrl(`${dbName}/_security`), {
method: "PUT",
headers,
body: JSON.stringify(dbSecurity),
}).then((response) => response.json());
if (!responseSetSecurity.ok) {
throw new Error(
`${dbName} security error ${JSON.stringify(responseSetSecurity)}`,
);
}
}
};
export const down = async () => {
for (const dbName of Object.keys(dbsSecurity)) {
const responseDeleteDb = await fetch(getUrl(dbName), {
headers,
method: "DELETE",
});
console.assert(
(await responseDeleteDb.json()).ok,
`${dbName} create db error`,
);
}
};