yaml-admin-api 0.0.9 → 0.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yaml-admin-api",
3
- "version": "0.0.9",
3
+ "version": "0.0.11",
4
4
  "description": "YAML Admin API package",
5
5
  "type": "commonjs",
6
6
  "main": "src/index.js",
@@ -18,6 +18,8 @@ const generateCrud = async ({ app, db, entity_name, yml_entity, yml, options })
18
18
  access_key_id: yml.upload.s3.access_key_id,
19
19
  secret_access_key: yml.upload.s3.secret_access_key,
20
20
  bucket: yml.upload.s3.bucket,
21
+ region: yml.upload.s3.region,
22
+ prefix: yml.upload.s3.prefix,
21
23
  bucket_private: yml.upload.s3.bucket_private,
22
24
  base_url: yml.upload.s3.base_url,
23
25
  }) : withConfigLocal({
@@ -166,7 +168,7 @@ const generateCrud = async ({ app, db, entity_name, yml_entity, yml, options })
166
168
  }
167
169
  })
168
170
 
169
- console.log('f', f, req.query)
171
+ //console.log('f', f)
170
172
 
171
173
  var name = req.query.name;
172
174
  if (name == null && req.query.q)
@@ -364,7 +366,7 @@ const generateCrud = async ({ app, db, entity_name, yml_entity, yml, options })
364
366
  const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'buffer' });
365
367
 
366
368
  const currentTime = moment().format('YYYYMMDD_HHmmss');
367
- const key = `${filename}${currentTime}.xlsx`;
369
+ const key = `/excel/${filename}${currentTime}.xlsx`;
368
370
  await uploader.uploadSecure(key, excelBuffer);
369
371
  let url = await uploader.getUrlSecure(key, auth);
370
372
  return res.json({ r: true, url });
@@ -1,17 +1,6 @@
1
1
  const moment = require('moment')
2
2
  const fs = require('fs')
3
3
 
4
- const getUrl = async (Key) => {
5
- //console.log('getSignedUrl')
6
- let r = await s3.getSignedUrl('getObject', {
7
- Bucket:aws_bucket_private,
8
- Key,
9
- })
10
-
11
- //console.log(r)
12
- return r
13
- }
14
-
15
4
  const withConfigLocal = ({path, path_private, base_url, api_host}) => {
16
5
 
17
6
  const upload = async (key, stream) => {
@@ -2,46 +2,97 @@ const moment = require('moment')
2
2
  const { S3Client, PutObjectCommand, GetObjectCommand, DeleteObjectCommand } = require('@aws-sdk/client-s3')
3
3
  const { getSignedUrl } = require('@aws-sdk/s3-request-presigner')
4
4
 
5
-
6
- const upload = async (key, stream) => {
7
- if(!key){
8
- throw new Error('필수값이 없습니다')
9
- }
10
- //console.log('uploadExcel')
11
- return await s3.upload({
12
- Bucket: aws_bucket_private,
13
- Key: key,
14
- Body: stream,
15
- ACL: 'private',
16
- Expires: moment().add(10, 'minute').toISOString(),
17
- ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
18
- }).promise()
5
+ const whatIsContentType = (ext) => {
6
+ let contentType = 'image/jpeg'
7
+ if(ext == 'mp4')
8
+ contentType = 'video/mp4'
9
+ else if(ext == 'mov')
10
+ contentType = 'video/quicktime'
11
+ else if(ext == 'png')
12
+ contentType = 'image/png'
13
+ else if(ext == 'xlsx')
14
+ contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
15
+ else if(ext == 'zip')
16
+ contentType = 'application/zip'
17
+ else if(ext == 'pdf')
18
+ contentType = 'application/pdf'
19
+ else if(ext == 'docx')
20
+ contentType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
21
+ else if(ext == 'doc')
22
+ contentType = 'application/msword'
23
+ else if(ext == 'txt')
24
+ contentType = 'text/plain'
25
+ else if(ext == 'csv')
26
+ contentType = 'text/csv'
27
+ else if(ext == 'xls')
28
+ contentType = 'application/vnd.ms-excel'
29
+ else if(ext == 'pptx')
30
+ contentType = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
31
+ else if(ext == 'ppt')
32
+ contentType = 'application/vnd.ms-powerpoint'
33
+ else if(ext == 'mp3')
34
+ contentType = 'audio/mpeg'
35
+ else if(ext == 'mov')
36
+ contentType = 'video/quicktime'
37
+ return contentType
19
38
  }
20
39
 
21
- const getUrl = async (Key) => {
22
- //console.log('getSignedUrl')
23
- let r = await s3.getSignedUrl('getObject', {
24
- Bucket:aws_bucket_private,
25
- Key,
40
+
41
+ const withConfigS3 = ({ access_key_id, secret_access_key, region, prefix, bucket, bucket_private, base_url }) => {
42
+ const s3 = new S3Client({
43
+ region: region,
44
+ credentials: {
45
+ accessKeyId: access_key_id,
46
+ secretAccessKey: secret_access_key
47
+ }
26
48
  })
27
49
 
28
- //console.log(r)
29
- return r
30
- }
50
+ const upload = async (key, stream) => {
51
+ return await s3.send(new PutObjectCommand({
52
+ Bucket: bucket,
53
+ Key: key,
54
+ Body: stream,
55
+ ACL: 'public-read',
56
+ ContentType: whatIsContentType(key.split('.').pop()),
57
+ }))
58
+ }
31
59
 
32
- const getSecureUrl = async (Key) => {
33
- //console.log('getSignedUrl')
34
- let r = await s3.getSignedUrl('getObject', {
35
- Bucket:aws_bucket_private,
36
- Key,
37
- })
60
+ const uploadSecure = async (Key, stream) => {
61
+ console.log('uploadSecure', prefix, Key)
62
+ return await s3.send(new PutObjectCommand({
63
+ Bucket: bucket_private,
64
+ Key: `${prefix}/${Key}`,
65
+ Body: stream,
66
+ ACL: 'private',
67
+ Expires: moment().add(10, 'minute').toDate(),
68
+ ContentType: whatIsContentType(Key.split('.').pop()),
69
+ }))
70
+ }
71
+
72
+ const getUrl = async (Key) => {
73
+ return `${base_url}/${prefix}/${Key}`
74
+ }
75
+
76
+ const getUrlSecure = async (Key) => {
77
+ const command = new GetObjectCommand({
78
+ Bucket: bucket_private,
79
+ Key: `${prefix}/${Key}`,
80
+ })
81
+ const r = await getSignedUrl(s3, command, { expiresIn: 600 })
82
+ return r
83
+ }
38
84
 
39
- //console.log(r)
40
- return r
85
+ return {
86
+ upload,
87
+ uploadSecure,
88
+ getUrl,
89
+ getUrlSecure,
90
+ }
41
91
  }
42
92
 
93
+
94
+
43
95
  module.exports = {
44
- upload,
45
- getUrl,
46
- getSecureUrl,
96
+ withConfigS3,
97
+ whatIsContentType,
47
98
  };
@@ -4,22 +4,11 @@ const { getSignedUrl } = require('@aws-sdk/s3-request-presigner')
4
4
  const { genEntityIdWithKey } = require('../common/util.js');
5
5
  const { S3Client } = require('@aws-sdk/client-s3')
6
6
  const fs = require('fs')
7
-
8
- const getContentType = (ext) => {
9
- let contentType = 'image/jpeg'
10
- if(ext == 'mp4')
11
- contentType = 'video/mp4'
12
- else if(ext == 'mov')
13
- contentType = 'video/quicktime'
14
- else if(ext == 'png')
15
- contentType = 'image/png'
16
- return contentType
17
- }
18
-
7
+ const { whatIsContentType } = require('./s3Upload.js');
19
8
 
20
9
  const generateS3UploadApi = async ({ app, db, yml, options }) => {
21
10
  const auth = withConfig({ db, jwt_secret: yml.login["jwt-secret"] });
22
- const { region, access_key_id, secret_access_key, bucket, bucket_private } = yml.upload.s3;
11
+ const { region, access_key_id, secret_access_key, prefix, bucket, bucket_private } = yml.upload.s3;
23
12
  const getS3 = () => {
24
13
  let s3 = new S3Client({
25
14
  region: region,
@@ -33,15 +22,15 @@ const generateS3UploadApi = async ({ app, db, yml, options }) => {
33
22
 
34
23
  app.get('/api/media/url/put/:ext', auth.isAuthenticated, async function(req, res){
35
24
  let s3 = getS3()
36
- let {member_no} = req.user;
25
+ let member_no = req.user.member_no || req.user.id;;
37
26
  let fileName = await genEntityIdWithKey(db, 'file');
38
27
  let ext = req.params.ext;
39
28
 
40
- let contentType = getContentType(ext)
41
- let key = `media/${member_no}/${fileName}.${ext}`
42
- const uploadUrl = await getSignedUrl(s3, new PutObjectCommand({Bucket: aws_bucket_image,
29
+ let contentType = whatIsContentType(ext)
30
+ let key = `${member_no}/${fileName}.${ext}`
31
+ const uploadUrl = await getSignedUrl(s3, new PutObjectCommand({Bucket: bucket,
43
32
  ContentType: contentType,
44
- Key: key}), { expiresIn: 300 });
33
+ Key: `${prefix}/${key}`}), { expiresIn: 300 });
45
34
 
46
35
  let r = {upload_url:uploadUrl, key, fileName:`${fileName}.${ext}`, member_no, contentType}
47
36
  console.log(r)
@@ -50,15 +39,15 @@ const generateS3UploadApi = async ({ app, db, yml, options }) => {
50
39
 
51
40
  app.get('/api/media/url/secure/put/:ext', auth.isAuthenticated, async function(req, res){
52
41
  let s3 = getS3()
53
- let {member_no} = req.user;
42
+ let member_no = req.user.member_no || req.user.id;;
54
43
  let fileName = await genEntityIdWithKey(db, 'file');
55
44
  let ext = req.params.ext;
56
45
 
57
- let contentType = getContentType(ext)
58
- let key = `media/${member_no}/${fileName}.${ext}`
59
- const uploadUrl = await getSignedUrl(s3, new PutObjectCommand({Bucket: aws_bucket_private,
46
+ let contentType = whatIsContentType(ext)
47
+ let key = `${member_no}/${fileName}.${ext}`
48
+ const uploadUrl = await getSignedUrl(s3, new PutObjectCommand({Bucket: bucket_private,
60
49
  ContentType: contentType,
61
- Key: key}), { expiresIn: 300 });
50
+ Key: `${prefix}/${key}`}), { expiresIn: 300 });
62
51
 
63
52
  let r = {upload_url:uploadUrl, key, fileName:`${fileName}.${ext}`, member_no, contentType}
64
53
 
@@ -72,12 +61,12 @@ const generateS3UploadApi = async ({ app, db, yml, options }) => {
72
61
  let fileName = await genEntityIdWithKey(db, 'file');
73
62
  let ext = req.params.ext;
74
63
 
75
- let key = `media/${member_no}/${fileName}.${ext}`;
76
- let contentType = getContentType(ext);
64
+ let key = `/${member_no}/${fileName}.${ext}`;
65
+ let contentType = whatIsContentType(ext);
77
66
 
78
67
  const createMultipartUpload = await s3.send(new CreateMultipartUploadCommand({
79
- Bucket: aws_bucket_private,
80
- Key: key,
68
+ Bucket: bucket_private,
69
+ Key: `${prefix}/${key}`,
81
70
  ContentType: contentType
82
71
  }));
83
72
 
@@ -90,8 +79,8 @@ const generateS3UploadApi = async ({ app, db, yml, options }) => {
90
79
  let { key, uploadId, partNumber } = req.body;
91
80
 
92
81
  const command = new UploadPartCommand({
93
- Bucket: aws_bucket_private,
94
- Key: key,
82
+ Bucket: bucket_private,
83
+ Key: `${prefix}/${key}`,
95
84
  UploadId: uploadId,
96
85
  PartNumber: partNumber
97
86
  });
@@ -109,8 +98,8 @@ const generateS3UploadApi = async ({ app, db, yml, options }) => {
109
98
  parts.sort((a, b) => a.PartNumber - b.PartNumber);
110
99
 
111
100
  await s3.send(new CompleteMultipartUploadCommand({
112
- Bucket: aws_bucket_private,
113
- Key: key,
101
+ Bucket: bucket_private,
102
+ Key: `${prefix}/${key}`,
114
103
  UploadId: uploadId,
115
104
  MultipartUpload: { Parts: parts }
116
105
  }));
@@ -125,8 +114,8 @@ const generateS3UploadApi = async ({ app, db, yml, options }) => {
125
114
  const s3 = getS3();
126
115
 
127
116
  await s3.send(new AbortMultipartUploadCommand({
128
- Bucket: aws_bucket_private,
129
- Key: key,
117
+ Bucket: bucket_private,
118
+ Key: `${prefix}/${key}`,
130
119
  UploadId: uploadId
131
120
  }));
132
121
 
@@ -139,17 +128,17 @@ const generateS3UploadApi = async ({ app, db, yml, options }) => {
139
128
 
140
129
  app.post('/api/media/url/put', auth.isAuthenticated, async function(req, res) {
141
130
  let s3 = getS3()
142
- let {member_no} = req.user
131
+ let member_no = req.user.member_no || req.user.id;
143
132
  const {ext_list} = req.body
144
133
 
145
134
  let r = {list:[], r:true}
146
135
  for(let ext of ext_list) {
147
136
  let fileName = await genEntityIdWithKey(db, 'file')
148
- let key = `media/${member_no}/${fileName}.${ext}`
149
- let contentType = getContentType(ext)
150
- const upload_url = await getSignedUrl(s3, new PutObjectCommand({Bucket: aws_bucket_image,
137
+ let key = `/${member_no}/${fileName}.${ext}`
138
+ let contentType = whatIsContentType(ext)
139
+ const upload_url = await getSignedUrl(s3, new PutObjectCommand({Bucket: bucket,
151
140
  ContentType: contentType,
152
- Key: key}), { expiresIn: 300 });
141
+ Key: `${prefix}/${key}`}), { expiresIn: 300 });
153
142
 
154
143
  r.list.push({upload_url, key, fileName:`${fileName}.${ext}`, member_no, contentType})
155
144
  }
@@ -159,17 +148,17 @@ const generateS3UploadApi = async ({ app, db, yml, options }) => {
159
148
 
160
149
  app.post('/api/media/url/secure/put', auth.isAuthenticated, async function(req, res) {
161
150
  let s3 = getS3()
162
- let {member_no} = req.user
151
+ let member_no = req.user.member_no || req.user.id;
163
152
  const {ext_list} = req.body
164
153
 
165
154
  let r = {list:[], r:true}
166
155
  for(let ext of ext_list) {
167
156
  let fileName = await genEntityIdWithKey(db, 'file')
168
- let key = `media/${member_no}/${fileName}.${ext}`
169
- let contentType = getContentType(ext)
170
- const upload_url = await getSignedUrl(s3, new PutObjectCommand({Bucket: aws_bucket_private,
157
+ let key = `${member_no}/${fileName}.${ext}`
158
+ let contentType = whatIsContentType(ext)
159
+ const upload_url = await getSignedUrl(s3, new PutObjectCommand({Bucket: bucket_private,
171
160
  ContentType: contentType,
172
- Key: key}), { expiresIn: 300 });
161
+ Key: `${prefix}/${key}`}), { expiresIn: 300 });
173
162
 
174
163
  r.list.push({upload_url, key, fileName:`${fileName}.${ext}`, member_no, contentType})
175
164
  }
@@ -187,7 +176,7 @@ const generateLocalUploadApi = async ({ app, db, yml, options }) => {
187
176
  let member_no = req.user.member_no || req.user.id;
188
177
  let {ext, name} = req.query
189
178
  let fileName = await genEntityIdWithKey(db, 'file')
190
- let key = `media/${member_no}/${fileName}.${ext}`
179
+ let key = `${member_no}/${fileName}.${ext}`
191
180
 
192
181
  // Ensure directory exists
193
182
  const fullPath = `${path}/${key}`;
@@ -209,7 +198,7 @@ const generateLocalUploadApi = async ({ app, db, yml, options }) => {
209
198
  let {ext, name} = req.query
210
199
 
211
200
  let fileName = await genEntityIdWithKey(db, 'file')
212
- let key = `media/${member_no}/${fileName}.${ext}`
201
+ let key = `${member_no}/${fileName}.${ext}`
213
202
 
214
203
  try {
215
204
  // Ensure directory exists