* save images as private and serve via signed url from images.info api * download private images to directory on export * fix lint errors * private s3 default, AWS.s3 module level scope, default s3 url expiry * combine regex to one, and only replace when there are matches * fix lint * code not needed anymore, remove * updates after pulling master * revert the uploadToS3FromUrl url return * use model gettr to compact code, rename to attachments api * basic checking of document read permission to allow attachment viewing * fix: Continue to upload avatars as public fix: Allow redirect for non-private attachments * add support for publicly shared documents * catch errors which crash the app during zip export and user creation * add tests * enable AWS signature v4 for s3 * switch to use factories to build models for testing * add isDocker flag for local serving of attachment redirect url * fix redirect tests Co-authored-by: Tom Moor <tom.moor@gmail.com>
60 lines
1.2 KiB
JavaScript
60 lines
1.2 KiB
JavaScript
// @flow
|
|
import path from 'path';
|
|
import { DataTypes, sequelize } from '../sequelize';
|
|
|
|
const Attachment = sequelize.define(
|
|
'attachment',
|
|
{
|
|
id: {
|
|
type: DataTypes.UUID,
|
|
defaultValue: DataTypes.UUIDV4,
|
|
primaryKey: true,
|
|
},
|
|
key: {
|
|
type: DataTypes.STRING,
|
|
allowNull: false,
|
|
},
|
|
url: {
|
|
type: DataTypes.STRING,
|
|
allowNull: false,
|
|
},
|
|
contentType: {
|
|
type: DataTypes.STRING,
|
|
allowNull: false,
|
|
},
|
|
size: {
|
|
type: DataTypes.BIGINT,
|
|
allowNull: false,
|
|
},
|
|
acl: {
|
|
type: DataTypes.STRING,
|
|
allowNull: false,
|
|
defaultValue: 'public-read',
|
|
validate: {
|
|
isIn: [['private', 'public-read']],
|
|
},
|
|
},
|
|
},
|
|
{
|
|
getterMethods: {
|
|
name: function() {
|
|
return path.parse(this.key).base;
|
|
},
|
|
redirectUrl: function() {
|
|
return `/api/attachments.redirect?id=${this.id}`;
|
|
},
|
|
isPrivate: function() {
|
|
return this.acl === 'private';
|
|
},
|
|
},
|
|
}
|
|
);
|
|
|
|
Attachment.associate = models => {
|
|
Attachment.belongsTo(models.Team);
|
|
Attachment.belongsTo(models.Document);
|
|
Attachment.belongsTo(models.User);
|
|
};
|
|
|
|
export default Attachment;
|