diff --git a/src/handlers/post.js b/src/handlers/post.js index 5adc8ff..c1be278 100644 --- a/src/handlers/post.js +++ b/src/handlers/post.js @@ -13,6 +13,7 @@ import { postSource } from '../routes/source.js'; import { postConfig } from '../routes/config.js'; import { postVersionSource } from '../routes/version.js'; import copyHandler from '../routes/copy.js'; +import renameHandler from '../routes/rename.js'; export default async function postHandler({ req, env, daCtx }) { const { path } = daCtx; @@ -21,6 +22,7 @@ export default async function postHandler({ req, env, daCtx }) { if (path.startsWith('/config')) return postConfig({ req, env, daCtx }); if (path.startsWith('/versionsource')) return postVersionSource({ env, daCtx }); if (path.startsWith('/copy')) return copyHandler({ req, env, daCtx }); + if (path.startsWith('/rename')) return renameHandler({ req, env, daCtx }); return undefined; } diff --git a/src/helpers/rename.js b/src/helpers/rename.js new file mode 100644 index 0000000..3c5b530 --- /dev/null +++ b/src/helpers/rename.js @@ -0,0 +1,19 @@ +/* + * Copyright 2024 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +export default async function renameHelper(req, daCtx) { + const formData = await req.formData(); + if (!formData) return {}; + const newname = formData.get('newname'); + const source = daCtx.key; + const destination = `${source.substring(0, source.lastIndexOf('/') + 1)}${newname}`; + return { source, destination }; +} diff --git a/src/routes/rename.js b/src/routes/rename.js new file mode 100644 index 0000000..c16646a --- /dev/null +++ b/src/routes/rename.js @@ -0,0 +1,18 @@ +/* + * Copyright 2024 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +import renameObject from '../storage/object/rename.js'; +import renameHelper from '../helpers/rename.js'; + +export default async function renameHandler({ req, env, daCtx }) { + const details = await renameHelper(req, daCtx); + return renameObject(env, daCtx, details); +} diff --git a/src/storage/object/rename.js b/src/storage/object/rename.js new file mode 100644 index 0000000..adcf2a5 --- /dev/null +++ b/src/storage/object/rename.js @@ -0,0 +1,33 @@ +/* + * Copyright 2024 Adobe. All rights reserved. + * This file is licensed to you under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under + * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS + * OF ANY KIND, either express or implied. See the License for the specific language + * governing permissions and limitations under the License. + */ +import copyObject from './copy.js'; +import deleteObjects from './delete.js'; + +const rename = async (env, daCtx, details) => { + try { + await copyObject(env, daCtx, details); + await deleteObjects(env, daCtx); + } catch (e) { + // eslint-disable-next-line no-console + console.log(e); + } +}; + +export default async function renameObject(env, daCtx, details) { + try { + await rename(env, daCtx, details); + } catch (e) { + // eslint-disable-next-line no-console + console.log(e); + } + return { status: 204 }; +}