mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-09 10:34:17 +00:00
fix s3path incorrectly includes bucketid
This commit is contained in:
parent
a8f7dc3c13
commit
564cecd2f0
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@comty/server",
|
"name": "@comty/server",
|
||||||
"version": "1.30.2@alpha",
|
"version": "1.30.3@alpha",
|
||||||
"license": "ComtyLicense",
|
"license": "ComtyLicense",
|
||||||
"private": true,
|
"private": true,
|
||||||
"workspaces": [
|
"workspaces": [
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
{
|
{
|
||||||
"name": "marketplace",
|
"name": "marketplace",
|
||||||
"version": "0.60.2",
|
"dependencies": {
|
||||||
"dependencies": {
|
"7zip-min": "^1.4.4",
|
||||||
"@octokit/rest": "^19.0.7",
|
"backblaze-b2": "^1.7.0",
|
||||||
"7zip-min": "^1.4.4",
|
"sucrase": "^3.32.0",
|
||||||
"backblaze-b2": "^1.7.0",
|
"uglify-js": "^3.17.4"
|
||||||
"sucrase": "^3.32.0",
|
}
|
||||||
"uglify-js": "^3.17.4"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -5,129 +5,138 @@ import path from "node:path"
|
|||||||
import sevenzip from "7zip-min"
|
import sevenzip from "7zip-min"
|
||||||
|
|
||||||
async function uploadFolderToB2(bucketId, folderPath, b2Directory) {
|
async function uploadFolderToB2(bucketId, folderPath, b2Directory) {
|
||||||
try {
|
try {
|
||||||
const uploadFiles = async (dir) => {
|
const uploadFiles = async (dir) => {
|
||||||
const files = fs.readdirSync(dir)
|
const files = fs.readdirSync(dir)
|
||||||
|
|
||||||
for (const file of files) {
|
for (const file of files) {
|
||||||
const fullPath = path.join(dir, file)
|
const fullPath = path.join(dir, file)
|
||||||
const stats = fs.statSync(fullPath)
|
const stats = fs.statSync(fullPath)
|
||||||
|
|
||||||
if (stats.isDirectory()) {
|
if (stats.isDirectory()) {
|
||||||
await uploadFiles(fullPath)
|
await uploadFiles(fullPath)
|
||||||
} else {
|
} else {
|
||||||
const fileData = fs.readFileSync(fullPath)
|
const fileData = fs.readFileSync(fullPath)
|
||||||
const b2FileName = path.join(b2Directory, path.relative(folderPath, fullPath)).replace(/\\/g, '/')
|
const b2FileName = path
|
||||||
|
.join(b2Directory, path.relative(folderPath, fullPath))
|
||||||
|
.replace(/\\/g, "/")
|
||||||
|
|
||||||
console.log(`Uploading ${b2FileName}...`)
|
console.log(`Uploading ${b2FileName}...`)
|
||||||
|
|
||||||
const uploadUrl = await b2.getUploadUrl({
|
const uploadUrl = await b2.getUploadUrl({
|
||||||
bucketId: bucketId,
|
bucketId: bucketId,
|
||||||
})
|
})
|
||||||
|
|
||||||
await b2.uploadFile({
|
await b2.uploadFile({
|
||||||
uploadUrl: uploadUrl.data.uploadUrl,
|
uploadUrl: uploadUrl.data.uploadUrl,
|
||||||
uploadAuthToken: uploadUrl.data.authorizationToken,
|
uploadAuthToken: uploadUrl.data.authorizationToken,
|
||||||
fileName: b2FileName,
|
fileName: b2FileName,
|
||||||
data: fileData,
|
data: fileData,
|
||||||
})
|
})
|
||||||
|
|
||||||
console.log(`Uploaded ${b2FileName}`)
|
console.log(`Uploaded ${b2FileName}`)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await uploadFiles(folderPath)
|
await uploadFiles(folderPath)
|
||||||
console.log('All files uploaded successfully.')
|
console.log("All files uploaded successfully.")
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error uploading folder:', error)
|
console.error("Error uploading folder:", error)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
middlewares: ["withAuthentication"],
|
middlewares: ["withAuthentication"],
|
||||||
fn: async (req, res) => {
|
fn: async (req, res) => {
|
||||||
let { pkg } = req.headers
|
let { pkg } = req.headers
|
||||||
|
|
||||||
if (!pkg) {
|
if (!pkg) {
|
||||||
throw new OperationError(400, "Missing package")
|
throw new OperationError(400, "Missing package")
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!req.auth) {
|
if (!req.auth) {
|
||||||
throw new OperationError(401, "Unauthorized")
|
throw new OperationError(401, "Unauthorized")
|
||||||
}
|
}
|
||||||
|
|
||||||
pkg = JSON.parse(pkg)
|
pkg = JSON.parse(pkg)
|
||||||
|
|
||||||
const { user_id } = req.auth.session
|
const { user_id } = req.auth.session
|
||||||
const registryId = `${user_id}/${pkg.name}@${pkg.version}`
|
const registryId = `${user_id}/${pkg.name}@${pkg.version}`
|
||||||
const s3Path = `${process.env.B2_BUCKET_ID}/extensions/${pkg.name}/${pkg.version}`
|
const s3Path = `extensions/${pkg.name}/${pkg.version}`
|
||||||
const assetsUrl = `https://${process.env.B2_CDN_ENDPOINT}/${process.env.B2_BUCKET}/${s3Path}`
|
|
||||||
|
|
||||||
const workPath = path.resolve(global.cache.constructor.cachePath, String(Date.now()), registryId)
|
const workPath = path.resolve(
|
||||||
const pkgPath = path.resolve(workPath, "pkg")
|
global.cache.constructor.cachePath,
|
||||||
const bundlePath = path.resolve(workPath, "bundle.7z")
|
String(Date.now()),
|
||||||
|
registryId,
|
||||||
|
)
|
||||||
|
const pkgPath = path.resolve(workPath, "pkg")
|
||||||
|
const bundlePath = path.resolve(workPath, "bundle.7z")
|
||||||
|
|
||||||
// console.log({
|
// console.log({
|
||||||
// user_id,
|
// user_id,
|
||||||
// pkg,
|
// pkg,
|
||||||
// registryId,
|
// registryId,
|
||||||
// s3Path,
|
// s3Path,
|
||||||
// workPath,
|
// workPath,
|
||||||
// bundlePath
|
// bundlePath
|
||||||
// })
|
// })
|
||||||
|
|
||||||
let extensionRegistry = await Extension.findOne({
|
let extensionRegistry = await Extension.findOne({
|
||||||
user_id: user_id,
|
user_id: user_id,
|
||||||
registryId: registryId,
|
registryId: registryId,
|
||||||
version: pkg.version
|
version: pkg.version,
|
||||||
})
|
})
|
||||||
|
|
||||||
if (extensionRegistry) {
|
if (extensionRegistry) {
|
||||||
throw new OperationError(400, "Extension already exists")
|
throw new OperationError(400, "Extension already exists")
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (!fs.existsSync(workPath)) {
|
if (!fs.existsSync(workPath)) {
|
||||||
await fs.promises.mkdir(workPath, { recursive: true })
|
await fs.promises.mkdir(workPath, { recursive: true })
|
||||||
}
|
}
|
||||||
|
|
||||||
// read multipart form
|
// read multipart form
|
||||||
await req.multipart(async (field) => {
|
await req.multipart(async (field) => {
|
||||||
await field.write(bundlePath)
|
await field.write(bundlePath)
|
||||||
})
|
})
|
||||||
|
|
||||||
await new Promise((resolve, reject) => {
|
await new Promise((resolve, reject) => {
|
||||||
sevenzip.unpack(bundlePath, pkgPath, (error) => {
|
sevenzip.unpack(bundlePath, pkgPath, (error) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
fs.promises.rm(workPath, { recursive: true, force: true })
|
fs.promises.rm(workPath, {
|
||||||
reject(error)
|
recursive: true,
|
||||||
} else {
|
force: true,
|
||||||
resolve()
|
})
|
||||||
}
|
reject(error)
|
||||||
})
|
} else {
|
||||||
})
|
resolve()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
await uploadFolderToB2(process.env.B2_BUCKET_ID, pkgPath, s3Path)
|
await uploadFolderToB2(process.env.B2_BUCKET_ID, pkgPath, s3Path)
|
||||||
|
|
||||||
fs.promises.rm(workPath, { recursive: true, force: true })
|
fs.promises.rm(workPath, { recursive: true, force: true })
|
||||||
|
|
||||||
|
const assetsUrl = `https://${process.env.B2_CDN_ENDPOINT}/${process.env.B2_BUCKET}/${s3Path}`
|
||||||
|
|
||||||
extensionRegistry = await Extension.create({
|
extensionRegistry = await Extension.create({
|
||||||
user_id: user_id,
|
user_id: user_id,
|
||||||
name: pkg.name,
|
name: pkg.name,
|
||||||
version: pkg.version,
|
version: pkg.version,
|
||||||
registryId: registryId,
|
registryId: registryId,
|
||||||
assetsUrl: assetsUrl,
|
assetsUrl: assetsUrl,
|
||||||
srcUrl: `${assetsUrl}/src`,
|
srcUrl: `${assetsUrl}/src`,
|
||||||
packageUrl: `${assetsUrl}/package.json`,
|
packageUrl: `${assetsUrl}/package.json`,
|
||||||
created_at: Date.now(),
|
created_at: Date.now(),
|
||||||
})
|
})
|
||||||
|
|
||||||
return extensionRegistry
|
return extensionRegistry
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
fs.promises.rm(workPath, { recursive: true, force: true })
|
fs.promises.rm(workPath, { recursive: true, force: true })
|
||||||
throw error
|
throw error
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user