refactored how avatars are being handled
This commit is contained in:
@@ -18,6 +18,7 @@ export default async function getCollection(userId: number) {
|
||||
select: {
|
||||
username: true,
|
||||
name: true,
|
||||
image: true,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
||||
@@ -42,6 +42,7 @@ export default async function getPublicUserById(
|
||||
const data = {
|
||||
name: lessSensitiveInfo.name,
|
||||
username: lessSensitiveInfo.username,
|
||||
image: lessSensitiveInfo.image,
|
||||
};
|
||||
|
||||
return { response: data, status: 200 };
|
||||
|
||||
@@ -89,12 +89,10 @@ export default async function updateUserById(
|
||||
|
||||
// Avatar Settings
|
||||
|
||||
const profilePic = data.profilePic;
|
||||
|
||||
if (profilePic.startsWith("data:image/jpeg;base64")) {
|
||||
if (data.profilePic.length < 1572864) {
|
||||
if (data.image?.startsWith("data:image/jpeg;base64")) {
|
||||
if (data.image.length < 1572864) {
|
||||
try {
|
||||
const base64Data = profilePic.replace(/^data:image\/jpeg;base64,/, "");
|
||||
const base64Data = data.image.replace(/^data:image\/jpeg;base64,/, "");
|
||||
|
||||
createFolder({ filePath: `uploads/avatar` });
|
||||
|
||||
@@ -113,7 +111,7 @@ export default async function updateUserById(
|
||||
status: 400,
|
||||
};
|
||||
}
|
||||
} else if (profilePic == "") {
|
||||
} else if (data.image == "") {
|
||||
removeFile({ filePath: `uploads/avatar/${sessionUser.id}.jpg` });
|
||||
}
|
||||
|
||||
@@ -131,6 +129,7 @@ export default async function updateUserById(
|
||||
username: data.username.toLowerCase().trim(),
|
||||
email: data.email?.toLowerCase().trim(),
|
||||
isPrivate: data.isPrivate,
|
||||
image: data.image ? `uploads/avatar/${sessionUser.id}.jpg` : "",
|
||||
archiveAsScreenshot: data.archiveAsScreenshot,
|
||||
archiveAsPDF: data.archiveAsPDF,
|
||||
archiveAsWaybackMachine: data.archiveAsWaybackMachine,
|
||||
@@ -197,7 +196,7 @@ export default async function updateUserById(
|
||||
const response: Omit<AccountSettings, "password"> = {
|
||||
...userInfo,
|
||||
whitelistedUsers: newWhitelistedUsernames,
|
||||
profilePic: `/api/v1/avatar/${userInfo.id}?${Date.now()}`,
|
||||
image: userInfo.image ? `${userInfo.image}?${Date.now()}` : "",
|
||||
};
|
||||
|
||||
return { response, status: 200 };
|
||||
|
||||
@@ -70,7 +70,7 @@ async function migrateToV2() {
|
||||
if (res) {
|
||||
await prisma.user.update({
|
||||
where: { id: user.id },
|
||||
data: { imagePath: path },
|
||||
data: { image: path },
|
||||
});
|
||||
console.log(`Updated avatar for avatar ${user.id}`);
|
||||
} else {
|
||||
|
||||
@@ -9,14 +9,12 @@ import s3Client from "./s3Client";
|
||||
import util from "util";
|
||||
|
||||
type ReturnContentTypes =
|
||||
| "text/html"
|
||||
| "text/plain"
|
||||
| "image/jpeg"
|
||||
| "image/png"
|
||||
| "application/pdf";
|
||||
|
||||
export default async function readFile(filePath: string) {
|
||||
const isRequestingAvatar = filePath.startsWith("uploads/avatar");
|
||||
|
||||
let contentType: ReturnContentTypes;
|
||||
|
||||
if (s3Client) {
|
||||
@@ -41,12 +39,12 @@ export default async function readFile(filePath: string) {
|
||||
try {
|
||||
await headObjectAsync(bucketParams);
|
||||
} catch (err) {
|
||||
contentType = "text/html";
|
||||
contentType = "text/plain";
|
||||
|
||||
returnObject = {
|
||||
file: isRequestingAvatar ? "File not found." : fileNotFoundTemplate,
|
||||
file: "File not found.",
|
||||
contentType,
|
||||
status: isRequestingAvatar ? 200 : 400,
|
||||
status: 400,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -71,9 +69,9 @@ export default async function readFile(filePath: string) {
|
||||
} catch (err) {
|
||||
console.log("Error:", err);
|
||||
|
||||
contentType = "text/html";
|
||||
contentType = "text/plain";
|
||||
return {
|
||||
file: "An internal occurred, please contact support.",
|
||||
file: "An internal occurred, please contact the support team.",
|
||||
contentType,
|
||||
};
|
||||
}
|
||||
@@ -92,9 +90,9 @@ export default async function readFile(filePath: string) {
|
||||
|
||||
if (!fs.existsSync(creationPath))
|
||||
return {
|
||||
file: isRequestingAvatar ? "File not found." : fileNotFoundTemplate,
|
||||
contentType: "text/html",
|
||||
status: isRequestingAvatar ? 200 : 400,
|
||||
file: "File not found.",
|
||||
contentType: "text/plain",
|
||||
status: 400,
|
||||
};
|
||||
else {
|
||||
const file = fs.readFileSync(creationPath);
|
||||
|
||||
Reference in New Issue
Block a user