chore: remove oslo dependency

This commit is contained in:
2024-12-14 00:03:26 +01:00
parent 45752d4fac
commit aa6eaffc76
4 changed files with 137 additions and 14 deletions

View File

@@ -1,7 +1,7 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
webpack: (config) => {
config.externals.push("@node-rs/argon2", "@node-rs/bcrypt");
config.externals.push("@node-rs/argon2");
return config;
}
};

View File

@@ -12,6 +12,7 @@
},
"dependencies": {
"@lucia-auth/adapter-prisma": "^4.0.1",
"@node-rs/argon2": "^2.0.2",
"@prisma/client": "^5.12.1",
"@radix-ui/react-avatar": "^1.0.4",
"@radix-ui/react-dropdown-menu": "^2.1.2",
@@ -23,7 +24,6 @@
"lucide-react": "^0.368.0",
"next": "^14.2.3",
"next-themes": "^0.3.0",
"oslo": "^1.2.1",
"react": "^18",
"react-dom": "^18",
"sonner": "^1.4.41",
@@ -41,5 +41,6 @@
"prisma": "^5.12.1",
"tailwindcss": "^3.4.1",
"typescript": "^5"
}
},
"packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e"
}

View File

@@ -4,9 +4,9 @@ import { cookies } from "next/headers";
import { lucia, validateRequest } from ".";
import { redirect } from "next/navigation";
import prisma from "../db";
import { Argon2id } from "oslo/password";
import { generateId } from "lucia";
import { accountSchema } from "./zod";
import { hash, verify } from "@node-rs/argon2";
export async function logout() {
const { session } = await validateRequest();
@@ -46,7 +46,7 @@ export async function login(prev: any, data: FormData) {
};
}
const validPassword = await new Argon2id().verify(existingUser.hashed_password, password);
const validPassword = await verify(existingUser.hashed_password, password);
if (!validPassword) {
return {
error: "Incorrect username or password",
@@ -69,7 +69,7 @@ export async function signup(prev: any, formData: FormData): Promise<ActionResul
};
const { username, password } = checkSchema.data;
const hashedPassword = await new Argon2id().hash(password);
const hashedPassword = await hash(password);
const userId = generateId(15);
await prisma.user.create({

138
yarn.lock
View File

@@ -26,6 +26,14 @@
dependencies:
tslib "^2.4.0"
"@emnapi/core@^1.1.0":
version "1.3.1"
resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.3.1.tgz#9c62d185372d1bddc94682b87f376e03dfac3f16"
integrity sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==
dependencies:
"@emnapi/wasi-threads" "1.0.1"
tslib "^2.4.0"
"@emnapi/runtime@^0.45.0":
version "0.45.0"
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-0.45.0.tgz#e754de04c683263f34fd0c7f32adfe718bbe4ddd"
@@ -33,6 +41,20 @@
dependencies:
tslib "^2.4.0"
"@emnapi/runtime@^1.1.0":
version "1.3.1"
resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.3.1.tgz#0fcaa575afc31f455fd33534c19381cfce6c6f60"
integrity sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==
dependencies:
tslib "^2.4.0"
"@emnapi/wasi-threads@1.0.1":
version "1.0.1"
resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz#d7ae71fd2166b1c916c6cd2d0df2ef565a2e1a5b"
integrity sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==
dependencies:
tslib "^2.4.0"
"@eslint-community/eslint-utils@^4.2.0":
version "4.4.0"
resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59"
@@ -160,6 +182,15 @@
resolved "https://registry.yarnpkg.com/@lucia-auth/adapter-prisma/-/adapter-prisma-4.0.1.tgz#8f8aa95bf0ac266fd2fb8ac3dc6dd9faec53342f"
integrity sha512-3SztRhj1RAHbbhI/0aB7YC5zl6Z6aktPhkWpn2CHhiB03B9x/+A+M6pqJuAt1usU8PzkjVilgRPhrPymMar66A==
"@napi-rs/wasm-runtime@^0.2.5":
version "0.2.5"
resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.5.tgz#b6f5079408305fe6a3529ccb2bb8ba8d9b7a02e7"
integrity sha512-kwUxR7J9WLutBbulqg1dfOrMTwhMdXLdcGUhcbCcGwnPLt3gz19uHVdwH1syKVDbE022ZS2vZxOWflFLS0YTjw==
dependencies:
"@emnapi/core" "^1.1.0"
"@emnapi/runtime" "^1.1.0"
"@tybys/wasm-util" "^0.9.0"
"@next/env@14.2.3":
version "14.2.3"
resolved "https://registry.yarnpkg.com/@next/env/-/env-14.2.3.tgz#d6def29d1c763c0afb397343a15a82e7d92353a0"
@@ -222,51 +253,101 @@
resolved "https://registry.yarnpkg.com/@node-rs/argon2-android-arm-eabi/-/argon2-android-arm-eabi-1.7.0.tgz#9de6d4519e7b757d0e3480d4b108fd0d698be332"
integrity sha512-udDqkr5P9E+wYX1SZwAVPdyfYvaF4ry9Tm+R9LkfSHbzWH0uhU6zjIwNRp7m+n4gx691rk+lqqDAIP8RLKwbhg==
"@node-rs/argon2-android-arm-eabi@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-android-arm-eabi/-/argon2-android-arm-eabi-2.0.2.tgz#19697cafd85847b35699a62a0d31611afd93a60c"
integrity sha512-DV/H8p/jt40lrao5z5g6nM9dPNPGEHL+aK6Iy/og+dbL503Uj0AHLqj1Hk9aVUSCNnsDdUEKp4TVMi0YakDYKw==
"@node-rs/argon2-android-arm64@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-android-arm64/-/argon2-android-arm64-1.7.0.tgz#9e0d65e64002537f7145006d103582eceb87a8e3"
integrity sha512-s9j/G30xKUx8WU50WIhF0fIl1EdhBGq0RQ06lEhZ0Gi0ap8lhqbE2Bn5h3/G2D1k0Dx+yjeVVNmt/xOQIRG38A==
"@node-rs/argon2-android-arm64@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-android-arm64/-/argon2-android-arm64-2.0.2.tgz#cb1a253dba9f1d5dc950437b2ad5a6d28e34626a"
integrity sha512-1LKwskau+8O1ktKx7TbK7jx1oMOMt4YEXZOdSNIar1TQKxm6isZ0cRXgHLibPHEcNHgYRsJWDE9zvDGBB17QDg==
"@node-rs/argon2-darwin-arm64@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-darwin-arm64/-/argon2-darwin-arm64-1.7.0.tgz#1d8f8d7a637313cf3b74ec81f8e21f6555d681b4"
integrity sha512-ZIz4L6HGOB9U1kW23g+m7anGNuTZ0RuTw0vNp3o+2DWpb8u8rODq6A8tH4JRL79S+Co/Nq608m9uackN2pe0Rw==
"@node-rs/argon2-darwin-arm64@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-darwin-arm64/-/argon2-darwin-arm64-2.0.2.tgz#5d1c799d858ac8d53e35f5514d5fc13723671099"
integrity sha512-3TTNL/7wbcpNju5YcqUrCgXnXUSbD7ogeAKatzBVHsbpjZQbNb1NDxDjqqrWoTt6XL3z9mJUMGwbAk7zQltHtA==
"@node-rs/argon2-darwin-x64@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-darwin-x64/-/argon2-darwin-x64-1.7.0.tgz#2a63cffbd4212d40242f65d7c140cae16ba7ca24"
integrity sha512-5oi/pxqVhODW/pj1+3zElMTn/YukQeywPHHYDbcAW3KsojFjKySfhcJMd1DjKTc+CHQI+4lOxZzSUzK7mI14Hw==
"@node-rs/argon2-darwin-x64@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-darwin-x64/-/argon2-darwin-x64-2.0.2.tgz#303625a9c0e5cd7316a097be42e97a97fb2ce3fd"
integrity sha512-vNPfkLj5Ij5111UTiYuwgxMqE7DRbOS2y58O2DIySzSHbcnu+nipmRKg+P0doRq6eKIJStyBK8dQi5Ic8pFyDw==
"@node-rs/argon2-freebsd-x64@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-freebsd-x64/-/argon2-freebsd-x64-1.7.0.tgz#637b15bada735c47e57ad5d6403f70083ae6c104"
integrity sha512-Ify08683hA4QVXYoIm5SUWOY5DPIT/CMB0CQT+IdxQAg/F+qp342+lUkeAtD5bvStQuCx/dFO3bnnzoe2clMhA==
"@node-rs/argon2-freebsd-x64@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-freebsd-x64/-/argon2-freebsd-x64-2.0.2.tgz#21e60f5f8e17cc488ad380a5eb004d4202cf5eda"
integrity sha512-M8vQZk01qojQfCqQU0/O1j1a4zPPrz93zc9fSINY7Q/6RhQRBCYwDw7ltDCZXg5JRGlSaeS8cUXWyhPGar3cGg==
"@node-rs/argon2-linux-arm-gnueabihf@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-arm-gnueabihf/-/argon2-linux-arm-gnueabihf-1.7.0.tgz#fe6d43cb9c9e43788dfb6bb76c78736cc5b6f717"
integrity sha512-7DjDZ1h5AUHAtRNjD19RnQatbhL+uuxBASuuXIBu4/w6Dx8n7YPxwTP4MXfsvuRgKuMWiOb/Ub/HJ3kXVCXRkg==
"@node-rs/argon2-linux-arm-gnueabihf@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-arm-gnueabihf/-/argon2-linux-arm-gnueabihf-2.0.2.tgz#ca2ba217b5ddc56dc233baaf9f6eacfb065bfe66"
integrity sha512-7EmmEPHLzcu0G2GDh30L6G48CH38roFC2dqlQJmtRCxs6no3tTE/pvgBGatTp/o2n2oyOJcfmgndVFcUpwMnww==
"@node-rs/argon2-linux-arm64-gnu@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-arm64-gnu/-/argon2-linux-arm64-gnu-1.7.0.tgz#f5e3f5a9dd2d55fe3dd9816e0581e99a1abe1698"
integrity sha512-nJDoMP4Y3YcqGswE4DvP080w6O24RmnFEDnL0emdI8Nou17kNYBzP2546Nasx9GCyLzRcYQwZOUjrtUuQ+od2g==
"@node-rs/argon2-linux-arm64-gnu@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-arm64-gnu/-/argon2-linux-arm64-gnu-2.0.2.tgz#289b9ceebf41dd3125c5613aedb25751cf66da76"
integrity sha512-6lsYh3Ftbk+HAIZ7wNuRF4SZDtxtFTfK+HYFAQQyW7Ig3LHqasqwfUKRXVSV5tJ+xTnxjqgKzvZSUJCAyIfHew==
"@node-rs/argon2-linux-arm64-musl@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-arm64-musl/-/argon2-linux-arm64-musl-1.7.0.tgz#0e57f0d6ba78d3fd683583cffe5ec00b2e422ae5"
integrity sha512-BKWS8iVconhE3jrb9mj6t1J9vwUqQPpzCbUKxfTGJfc+kNL58F1SXHBoe2cDYGnHrFEHTY0YochzXoAfm4Dm/A==
"@node-rs/argon2-linux-arm64-musl@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-arm64-musl/-/argon2-linux-arm64-musl-2.0.2.tgz#9030a2834fbc4eb23fd707ee42485bcfe6f84e05"
integrity sha512-p3YqVMNT/4DNR67tIHTYGbedYmXxW9QlFmF39SkXyEbGQwpgSf6pH457/fyXBIYznTU/smnG9EH+C1uzT5j4hA==
"@node-rs/argon2-linux-x64-gnu@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-x64-gnu/-/argon2-linux-x64-gnu-1.7.0.tgz#d72bd52c970fe120b97ddb4a1f7719ccacf47c4a"
integrity sha512-EmgqZOlf4Jurk/szW1iTsVISx25bKksVC5uttJDUloTgsAgIGReCpUUO1R24pBhu9ESJa47iv8NSf3yAfGv6jQ==
"@node-rs/argon2-linux-x64-gnu@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-x64-gnu/-/argon2-linux-x64-gnu-2.0.2.tgz#7d36816e4862d9511b782947737bb3e08a2a622e"
integrity sha512-ZM3jrHuJ0dKOhvA80gKJqBpBRmTJTFSo2+xVZR+phQcbAKRlDMSZMFDiKbSTnctkfwNFtjgDdh5g1vaEV04AvA==
"@node-rs/argon2-linux-x64-musl@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-x64-musl/-/argon2-linux-x64-musl-1.7.0.tgz#850b4fa411bd005d6815228d4495075434f46a5d"
integrity sha512-/o1efYCYIxjfuoRYyBTi2Iy+1iFfhqHCvvVsnjNSgO1xWiWrX0Rrt/xXW5Zsl7vS2Y+yu8PL8KFWRzZhaVxfKA==
"@node-rs/argon2-linux-x64-musl@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-linux-x64-musl/-/argon2-linux-x64-musl-2.0.2.tgz#2095a9bddd6cf15a82f633175fd0682d193bdea5"
integrity sha512-of5uPqk7oCRF/44a89YlWTEfjsftPywyTULwuFDKyD8QtVZoonrJR6ZWvfFE/6jBT68S0okAkAzzMEdBVWdxWw==
"@node-rs/argon2-wasm32-wasi@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-wasm32-wasi/-/argon2-wasm32-wasi-1.7.0.tgz#83b361b9e2ece101288306606fa883c2cba87e7d"
@@ -277,21 +358,43 @@
"@tybys/wasm-util" "^0.8.1"
memfs-browser "^3.4.13000"
"@node-rs/argon2-wasm32-wasi@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-wasm32-wasi/-/argon2-wasm32-wasi-2.0.2.tgz#9d6df558d8769c7d23c5c2011c6a750f9425c703"
integrity sha512-U3PzLYKSQYzTERstgtHLd4ZTkOF9co57zTXT77r0cVUsleGZOrd6ut7rHzeWwoJSiHOVxxa0OhG1JVQeB7lLoQ==
dependencies:
"@napi-rs/wasm-runtime" "^0.2.5"
"@node-rs/argon2-win32-arm64-msvc@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-win32-arm64-msvc/-/argon2-win32-arm64-msvc-1.7.0.tgz#7a6dc4d456c94cd2bdaa720e11dd325e158fb3dd"
integrity sha512-qgsU7T004COWWpSA0tppDqDxbPLgg8FaU09krIJ7FBl71Sz8SFO40h7fDIjfbTT5w7u6mcaINMQ5bSHu75PCaA==
"@node-rs/argon2-win32-arm64-msvc@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-win32-arm64-msvc/-/argon2-win32-arm64-msvc-2.0.2.tgz#9ceca7b2f007219b54771f15728f7c2868945fe3"
integrity sha512-Eisd7/NM0m23ijrGr6xI2iMocdOuyl6gO27gfMfya4C5BODbUSP7ljKJ7LrA0teqZMdYHesRDzx36Js++/vhiQ==
"@node-rs/argon2-win32-ia32-msvc@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-win32-ia32-msvc/-/argon2-win32-ia32-msvc-1.7.0.tgz#8405f226b06354915ae10f919c54d0883f2fb632"
integrity sha512-JGafwWYQ/HpZ3XSwP4adQ6W41pRvhcdXvpzIWtKvX+17+xEXAe2nmGWM6s27pVkg1iV2ZtoYLRDkOUoGqZkCcg==
"@node-rs/argon2-win32-ia32-msvc@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-win32-ia32-msvc/-/argon2-win32-ia32-msvc-2.0.2.tgz#7337f5ab7e2afea6cb5f525877b22c41cd51e92a"
integrity sha512-GsE2ezwAYwh72f9gIjbGTZOf4HxEksb5M2eCaj+Y5rGYVwAdt7C12Q2e9H5LRYxWcFvLH4m4jiSZpQQ4upnPAQ==
"@node-rs/argon2-win32-x64-msvc@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-win32-x64-msvc/-/argon2-win32-x64-msvc-1.7.0.tgz#3983e08350dacfb30697923faf1ce34243e11c86"
integrity sha512-9oq4ShyFakw8AG3mRls0AoCpxBFcimYx7+jvXeAf2OqKNO+mSA6eZ9z7KQeVCi0+SOEUYxMGf5UiGiDb9R6+9Q==
"@node-rs/argon2-win32-x64-msvc@2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2-win32-x64-msvc/-/argon2-win32-x64-msvc-2.0.2.tgz#a435c2e128e46767eb768f9a540a75c9fa2a12c3"
integrity sha512-cJxWXanH4Ew9CfuZ4IAEiafpOBCe97bzoKowHCGk5lG/7kR4WF/eknnBlHW9m8q7t10mKq75kruPLtbSDqgRTw==
"@node-rs/argon2@1.7.0":
version "1.7.0"
resolved "https://registry.yarnpkg.com/@node-rs/argon2/-/argon2-1.7.0.tgz#80f3fdd7c5643b763a98bd0f5a2f2f975bcd95e5"
@@ -312,6 +415,26 @@
"@node-rs/argon2-win32-ia32-msvc" "1.7.0"
"@node-rs/argon2-win32-x64-msvc" "1.7.0"
"@node-rs/argon2@^2.0.2":
version "2.0.2"
resolved "https://registry.yarnpkg.com/@node-rs/argon2/-/argon2-2.0.2.tgz#44de139f6d25584b915ed76c4e3c62d613c9840f"
integrity sha512-t64wIsPEtNd4aUPuTAyeL2ubxATCBGmeluaKXEMAFk/8w6AJIVVkeLKMBpgLW6LU2t5cQxT+env/c6jxbtTQBg==
optionalDependencies:
"@node-rs/argon2-android-arm-eabi" "2.0.2"
"@node-rs/argon2-android-arm64" "2.0.2"
"@node-rs/argon2-darwin-arm64" "2.0.2"
"@node-rs/argon2-darwin-x64" "2.0.2"
"@node-rs/argon2-freebsd-x64" "2.0.2"
"@node-rs/argon2-linux-arm-gnueabihf" "2.0.2"
"@node-rs/argon2-linux-arm64-gnu" "2.0.2"
"@node-rs/argon2-linux-arm64-musl" "2.0.2"
"@node-rs/argon2-linux-x64-gnu" "2.0.2"
"@node-rs/argon2-linux-x64-musl" "2.0.2"
"@node-rs/argon2-wasm32-wasi" "2.0.2"
"@node-rs/argon2-win32-arm64-msvc" "2.0.2"
"@node-rs/argon2-win32-ia32-msvc" "2.0.2"
"@node-rs/argon2-win32-x64-msvc" "2.0.2"
"@node-rs/bcrypt-android-arm-eabi@1.9.0":
version "1.9.0"
resolved "https://registry.yarnpkg.com/@node-rs/bcrypt-android-arm-eabi/-/bcrypt-android-arm-eabi-1.9.0.tgz#d31dab5aa9bb70a5fa09e30f101f3a997eb84a28"
@@ -777,6 +900,13 @@
dependencies:
tslib "^2.4.0"
"@tybys/wasm-util@^0.9.0":
version "0.9.0"
resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355"
integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==
dependencies:
tslib "^2.4.0"
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
@@ -2579,14 +2709,6 @@ oslo@1.2.0:
"@node-rs/argon2" "1.7.0"
"@node-rs/bcrypt" "1.9.0"
oslo@^1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/oslo/-/oslo-1.2.1.tgz#aa2b9729c2b9bae74248ba865e9904defe231474"
integrity sha512-HfIhB5ruTdQv0XX2XlncWQiJ5SIHZ7NHZhVyHth0CSZ/xzge00etRyYy/3wp/Dsu+PkxMC+6+B2lS/GcKoewkA==
dependencies:
"@node-rs/argon2" "1.7.0"
"@node-rs/bcrypt" "1.9.0"
p-limit@^3.0.2:
version "3.1.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"