shared/permissions.ts (31 lines of code) (raw):
import { STAGE } from "./awsIntegration";
import { S3 } from "@aws-sdk/client-s3";
interface Override {
userId: string;
active: boolean;
}
interface Permission {
permission: {
name: string;
app: string;
};
overrides: Override[];
}
export const getPinboardPermissionOverrides = (S3: S3) =>
S3.getObject({
Bucket: "permissions-cache",
Key: `${STAGE}/permissions.json`,
})
.then(({ Body }) => {
if (!Body) {
throw Error("could not read permissions");
}
return Body.transformToString();
})
.then((Body) => {
const allPermissions = JSON.parse(Body) as Permission[];
return allPermissions.find(
({ permission }) =>
// see https://github.com/guardian/permissions/pull/128
permission.app === "pinboard" && permission.name === "pinboard"
)?.overrides;
});