diff --git a/pages/delete_image.tsx b/pages/delete_image.tsx
new file mode 100644
index 0000000..08671c1
--- /dev/null
+++ b/pages/delete_image.tsx
@@ -0,0 +1,68 @@
+import AppBar from '../components/AppBar'
+import db_ops from '../server/helpers/db_ops'
+import Button from '@material-ui/core/Button';
+import axios from 'axios'
+import TextField from '@material-ui/core/TextField';
+
+import ErrorPage from 'next/error'
+import { useState } from 'react';
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export default function deleteImage(props: any) {
+ if (props.err) {
+ return
+ }
+ const [ImageID, setID] = useState(0);
+ const handleKeyPress = (e: React.KeyboardEvent) => {
+ if (e.keyCode === 13 || e.which === 13) {
+ delete_image();
+ }
+ };
+ const delete_image = () => {
+ axios(`/delete_image`, {
+ method: "post",
+ data: { id: ImageID },
+ withCredentials: true
+ }).then((resp) => {
+ alert(JSON.stringify(resp.data))
+ setID(0)
+ }).catch((err) => {
+ alert('check console for error message')
+ console.log(err)
+ setID(0)
+ })
+ }
+
+
+ return (
+
+
+
setID(parseInt(e.target.value)||0)}
+ onKeyPress={(e) => handleKeyPress(e)}
+ />
+
+
+ );
+}
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export async function getServerSideProps(context: any) {
+ if (context.req.session.authed && context.req.session.user_id) {
+ const user = await db_ops.activated_user.find_user_by_id(context.req.session.user_id)
+ if (user[0].isAdmin) {
+ return {
+ props: {},
+ }
+ }
+ }
+ return {
+ props: { err: true },
+ }
+}
diff --git a/server/helpers/db_ops.ts b/server/helpers/db_ops.ts
index d5022b2..47de447 100644
--- a/server/helpers/db_ops.ts
+++ b/server/helpers/db_ops.ts
@@ -129,36 +129,23 @@ async function get_all_color_hists(){
return color_hists
}
+async function delete_color_hist_by_id(id:number){
+ removeDocument("color_hist",{id:id})
+}
+
async function add_color_hist_by_id(id:number, color_hist:number[][]){
insertDocuments("color_hist", [{
id:id,
color_hist:color_hist
}])
}
-// async function get_all_phash_distances(){
-// const phash_distances = findDocuments("img_search", {})
-// return phash_distances
-// }
-// async function get_phash_distances_by_image_id(id:number){
-// const phash_distances = findDocuments("img_search", {id:id})
-// return phash_distances
-// }
-
-// async function add_image_to_image_search(id:number, phash_dist:Array>){
-// insertDocuments("img_search", [{
-// id:id,
-// phash_dist:phash_dist
-// }])
-// }
-// async function update_phash_dist_by_id(id:number, phash_dist:Array>){
-// updateDocument("images", {id: id},{phash_dist:phash_dist})
-// }
////////////////////////////////////////////////
/////////////////////////////////////////////////IMAGES OPS
+
async function add_tags_to_image_by_id(id:number,tags:string[]){
await addToArrayInDocument("images",{id:id},{tags:{ $each:tags}})
}
@@ -215,6 +202,9 @@ async function get_max_image_id(){
const result = await collection.find({}).sort({id:-1}).limit(1).toArray()
return result[0]?.id
}
+async function delete_image_by_id(id:number){
+ removeDocument("images",{id:id})
+}
async function add_image(id:number,file_ext:string,width:number,height:number,author:string,
size:string,derpi_link:string,
@@ -364,6 +354,7 @@ export default {
get_all_images,
find_image_by_id,
get_max_image_id,
+ delete_image_by_id,
find_images_by_tags,
get_ids_and_phashes,
find_image_by_phash,
@@ -376,15 +367,12 @@ export default {
get_all_color_hists,
get_color_hist_by_id,
add_color_hist_by_id,
- // get_all_phash_distances,
- // update_phash_dist_by_id,
- // add_image_to_image_search,
+ delete_color_hist_by_id,
get_color_similarities_by_id,
add_color_similarities_by_id,
delete_id_from_color_similarities,
add_color_similarity_to_other_image,
get_image_ids_from_color_similarities,
- // get_phash_distances_by_image_id,
},
password_recovery:{
update_user_password_by_id,
diff --git a/server/index.ts b/server/index.ts
index e761fd8..38a156b 100644
--- a/server/index.ts
+++ b/server/index.ts
@@ -33,6 +33,7 @@ import change_password from './routes/change_password';
import forgot_password from './routes/forgot_password';
import activate_account_email from './routes/activate_account_email';
import update_image_data from './routes/update_image_data'
+import delete_image from './routes/delete_image'
import import_from_derpi from './routes/import_from_derpi'
import reverse_search from './routes/reverse_search'
next_app.prepare().then(() => {
@@ -91,7 +92,9 @@ next_app.prepare().then(() => {
api_router.get('/auth/google/callback', google_oauth_callback)
api_router.post('/reverse_search', [upload.single('image'),recaptcha.middleware.verify], reverse_search)
+
api_router.post('/update_image_data', update_image_data)
+ api_router.post('/delete_image', delete_image)
api_router.post('/import_from_derpi', import_from_derpi)
api_router.post('/signup', [
diff --git a/server/routes/delete_image.ts b/server/routes/delete_image.ts
new file mode 100644
index 0000000..365f86e
--- /dev/null
+++ b/server/routes/delete_image.ts
@@ -0,0 +1,30 @@
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
+import db_ops from './../helpers/db_ops'
+import {Request, Response} from 'express';
+import config from '../../config/config'
+import fs from 'fs'
+async function delete_image(req:Request,res:Response) {
+ const id = parseInt(req.body.id);
+ if(!isNaN(id) && req.session?.user_id){
+ const user = await db_ops.activated_user.find_user_by_id(req.session?.user_id)
+ if(user[0].isAdmin){
+ const image=(await db_ops.image_ops.find_image_by_id(id))[0]
+ db_ops.image_ops.delete_image_by_id(id)
+ db_ops.image_search.delete_color_hist_by_id(id)
+ await db_ops.image_search.delete_id_from_color_similarities(id)
+ fs.unlink(`${config.root_path}/public/images/${id}.${image.file_ext}`,function(err){
+ if(err) return console.log(err);
+ console.log('file deleted successfully');
+ });
+ fs.unlink(`${config.root_path}/public/webp_images/${id}.webp`,function(err){
+ if(err) return console.log(err);
+ console.log('webp file deleted successfully');
+ });
+ res.json({message:"OK"})
+ return
+ }
+ }
+ res.sendStatus(404);
+}
+
+export default delete_image;
\ No newline at end of file