Merge branch 'feature/private-s3-bucket' into private-s3-bucket/non-mutating-signing

This commit is contained in:
Marc-Roig 2023-02-13 17:22:14 +01:00
commit f159f150f2
2 changed files with 44 additions and 51 deletions

View File

@ -2,6 +2,7 @@
const { assoc, has, prop, omit } = require('lodash/fp');
const strapiUtils = require('@strapi/utils');
const { mapAsync } = require('@strapi/utils');
const { ApplicationError } = require('@strapi/utils').errors;
const { getDeepPopulate, getDeepPopulateDraftCount } = require('./utils/populate');
const { getDeepRelationsCount } = require('./utils/count');
@ -72,36 +73,57 @@ module.exports = ({ strapi }) => ({
return assoc(`${CREATED_BY_ATTRIBUTE}.roles`, roles, entity);
},
find(opts, uid) {
/**
* Extend this function from other plugins to add custom mapping of entity
* responses
* @param {Object} entity
* @returns
*/
mapEntity(entity) {
return entity;
},
async find(opts, uid) {
const params = { ...opts, populate: getDeepPopulate(uid) };
return strapi.entityService.findMany(uid, params);
const entities = await strapi.entityService.findMany(uid, params);
await mapAsync(entities.results, async (entity) => this.mapEntity(entity, uid));
return entities;
},
findPage(opts, uid) {
async findPage(opts, uid) {
const params = { ...opts, populate: getDeepPopulate(uid, { maxLevel: 1 }) };
return strapi.entityService.findPage(uid, params);
const entities = await strapi.entityService.findPage(uid, params);
await mapAsync(entities.results, async (entity) => this.mapEntity(entity, uid));
return entities;
},
findWithRelationCountsPage(opts, uid) {
async findWithRelationCountsPage(opts, uid) {
const counterPopulate = getDeepPopulate(uid, { countMany: true, maxLevel: 1 });
const params = { ...opts, populate: addCreatedByRolesPopulate(counterPopulate) };
return strapi.entityService.findWithRelationCountsPage(uid, params);
const entities = await strapi.entityService.findWithRelationCountsPage(uid, params);
await mapAsync(entities.results, async (entity) => this.mapEntity(entity, uid));
return entities;
},
findOneWithCreatorRolesAndCount(id, uid) {
async findOneWithCreatorRolesAndCount(id, uid) {
const counterPopulate = getDeepPopulate(uid, { countMany: true, countOne: true });
const params = { populate: addCreatedByRolesPopulate(counterPopulate) };
return strapi.entityService.findOne(uid, id, params);
const entities = await strapi.entityService.findOne(uid, id, params);
await mapAsync(entities.results, async (entity) => this.mapEntity(entity, uid));
return entities;
},
async findOne(id, uid) {
const params = { populate: getDeepPopulate(uid) };
return strapi.entityService.findOne(uid, id, params);
const entity = await strapi.entityService.findOne(uid, id, params);
return this.mapEntity(entity, uid);
},
async findOneWithCreatorRoles(id, uid) {
@ -137,7 +159,7 @@ module.exports = ({ strapi }) => ({
return getDeepRelationsCount(entity, uid);
}
return entity;
return this.mapEntity(entity, uid);
},
async update(entity, body, uid) {
@ -158,7 +180,7 @@ module.exports = ({ strapi }) => ({
return getDeepRelationsCount(updatedEntity, uid);
}
return updatedEntity;
return this.mapEntity(updatedEntity, uid);
},
async delete(entity, uid) {
@ -219,7 +241,7 @@ module.exports = ({ strapi }) => ({
return getDeepRelationsCount(updatedEntity, uid);
}
return updatedEntity;
return this.mapEntity(updatedEntity, uid);
},
async unpublish(entity, body = {}, uid) {
@ -246,7 +268,7 @@ module.exports = ({ strapi }) => ({
return getDeepRelationsCount(updatedEntity, uid);
}
return updatedEntity;
return this.mapEntity(updatedEntity, uid);
},
async getNumberOfDraftRelations(id, uid) {

View File

@ -76,45 +76,16 @@ const addSignedFileUrlsToAdmin = () => {
// Documentation
strapi.container
.get('services')
.extend(`plugin::content-manager.entity-manager`, (entityManager) => {
const update = async (entity, body, uid) => {
const updatedEntity = await entityManager.update(entity, body, uid);
return signEntityMedia(updatedEntity, uid);
};
.extend('plugin::content-manager.entity-manager', (entityManager) => {
/**
* Map entity manager responses to sign private media URLs
* @param {Object} entity
* @param {string} uid
* @returns
*/
const mapEntity = async (entity, uid) => signEntityMedia(entity, uid);
const publish = async (entity, body, uid) => {
const publishedEntity = await entityManager.publish(entity, body, uid);
return signEntityMedia(publishedEntity, uid);
};
const unpublish = async (entity, body, uid) => {
const unpublishedEntity = await entityManager.unpublish(entity, body, uid);
return signEntityMedia(unpublishedEntity, uid);
};
const findOneWithCreatorRolesAndCount = async (id, uid) => {
// TODO: What if the entity is not found?
const entity = await entityManager.findOneWithCreatorRolesAndCount(id, uid);
return signEntityMedia(entity, uid);
};
const findWithRelationCountsPage = async (opts, uid) => {
const entities = await entityManager.findWithRelationCountsPage(opts, uid);
const results = await mapAsync(entities.results, async (entity) =>
signEntityMedia(entity, uid)
);
return { ...entities, results };
};
return {
...entityManager,
findOneWithCreatorRolesAndCount,
findWithRelationCountsPage,
update,
publish,
unpublish,
};
return { ...entityManager, mapEntity };
});
};