Skip to content
This repository has been archived by the owner on Aug 26, 2023. It is now read-only.

Commit

Permalink
cleaner yes
Browse files Browse the repository at this point in the history
  • Loading branch information
big cock committed Aug 20, 2023
1 parent 9572e54 commit 59535c9
Show file tree
Hide file tree
Showing 9 changed files with 136 additions and 146 deletions.
31 changes: 31 additions & 0 deletions src/functions/images.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
"use strict";

import fs from "fs";
import path from "path";
import type { Response } from "express";

export function getPath(dir: string): string {
return path.resolve(process.cwd(), dir);
}

export function renderError(res: Response, status: number, message: string) {
res.status(status).json({
error: true,
status,
message,
});
}

export function findFileWithoutExtension(
fileName: string,
dirPath: string
): string | null {
const fileWithoutExtension = fileName.replace(/\.[^.]+$/, "");
const files = fs.readdirSync(dirPath);

return (
files.find(
(file) => fileWithoutExtension === file.replace(/\.[^.]+$/, "")
) || null
);
}
5 changes: 5 additions & 0 deletions src/functions/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import * as images from "./images";
import * as keys from "./keys";
import * as sharex from "./sharex";

export { images, keys, sharex };
34 changes: 34 additions & 0 deletions src/functions/keys.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
"use strict";

import fs from "fs";

export interface IKeys {
key: string;
ip: string;
created_at: string;
}
export function loadKeysFromFile(): IKeys[] {
try {
const keysData = fs.readFileSync("keys.json", "utf8");
return JSON.parse(keysData) as IKeys[];
} catch (err) {
console.error(`Failed to load keys: ${err}`);
return [];
}
}

export function saveKeysToFile(keys: IKeys[]): void {
fs.writeFileSync("keys.json", JSON.stringify(keys, null, 2));
}

export function generateRandomKey(length: number): string {
const chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let result = "";

for (let i = 0; i < length; i++) {
result += chars.charAt(Math.floor(Math.random() * chars.length));
}

return result;
}
41 changes: 41 additions & 0 deletions src/functions/sharex.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
"use strict";

import { type Response } from "express";

export interface IShareXConfig {
Name: string;
DestinationType: string;
RequestType: string;
RequestURL: string;
Headers: {
key: string;
};
FileFormName: string;
ResponseType: string;
URL: string;
}

export function generateShareXConfig(key: string): IShareXConfig {
return {
Name: "Lazy Uploader",
DestinationType: "ImageUploader, TextUploader, FileUploader",
RequestType: "POST",
RequestURL: "https://im.sleepdeprived.wtf/api/upload/",
Headers: {
key,
},
FileFormName: "sharex",
ResponseType: "Text",
URL: "https://im.sleepdeprived.wtf/$json:url$",
};
}

export function sendShareXConfig(res: Response, config: IShareXConfig): void {
const file = JSON.stringify(config, null, 2);
const fileName = "sharex-config.sxcu";

res.setHeader("Content-disposition", `attachment; filename=${fileName}`);
res.setHeader("Content-type", "application/json");

res.send(file);
}
43 changes: 6 additions & 37 deletions src/routes/api/create-key.ts
Original file line number Diff line number Diff line change
@@ -1,29 +1,24 @@
"use strict";

import { Router, type Request, type Response } from "express";
import fs from "fs";
import type { IKeys } from "../../functions/keys";
import { keys as keyFunctions } from "../../functions";

const router: Router = Router();

interface Keys {
key: string;
ip: string;
created_at: string;
}

router.post("/", (req: Request, res: Response) => {
try {
const ip = req.headers["x-forwarded-for"] || req.socket.remoteAddress;
const keys = loadKeysFromFile();
const keys = keyFunctions.loadKeysFromFile();

const newKey: Keys = {
key: generateRandomKey(10),
const newKey: IKeys = {
key: keyFunctions.generateRandomKey(10),
created_at: new Date().toISOString(),
ip: ip as string,
};

keys.push(newKey);
saveKeysToFile(keys);
keyFunctions.saveKeysToFile(keys);

return res.status(200).json({
status: 200,
Expand All @@ -41,30 +36,4 @@ router.post("/", (req: Request, res: Response) => {
}
});

function loadKeysFromFile(): Keys[] {
try {
const keysData = fs.readFileSync("keys.json", "utf8");
return JSON.parse(keysData) as Keys[];
} catch (err) {
console.error(`Failed to load keys: ${err}`);
return [];
}
}

function saveKeysToFile(keys: Keys[]): void {
fs.writeFileSync("keys.json", JSON.stringify(keys, null, 2));
}

function generateRandomKey(length: number): string {
const chars =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let result = "";

for (let i = 0; i < length; i++) {
result += chars.charAt(Math.floor(Math.random() * chars.length));
}

return result;
}

export default router;
65 changes: 6 additions & 59 deletions src/routes/api/sharex-config.ts
Original file line number Diff line number Diff line change
@@ -1,34 +1,15 @@
"use strict";

import { Router, type Response } from "express";
import fs from "fs";

interface IKeys {
key: string;
ip: any;
created_at: string;
}

interface IShareXConfig {
Name: string;
DestinationType: string;
RequestType: string;
RequestURL: string;
Headers: {
key: string;
};
FileFormName: string;
ResponseType: string;
URL: string;
}
import { Router } from "express";
import type { IKeys } from "../../functions/keys";
import { keys as keyFunctions, sharex } from "../../functions";

const router: Router = Router();
const keysFile = "keys.json";

router.post("/", (req, res) => {
const { key } = req.headers as { key: string };

const validKeys = loadValidKeys();
const validKeys = keyFunctions.loadKeysFromFile();

if (!key) {
return res.status(403).json({
Expand All @@ -44,43 +25,9 @@ router.post("/", (req, res) => {
});
}

const config: IShareXConfig = generateShareXConfig(key);
const config: sharex.IShareXConfig = sharex.generateShareXConfig(key);

sendShareXConfig(res, config);
sharex.sendShareXConfig(res, config);
});

function loadValidKeys(): IKeys[] {
try {
const keysData = fs.readFileSync(keysFile, "utf8");
return JSON.parse(keysData) as IKeys[];
} catch (err) {
return [];
}
}

function generateShareXConfig(key: string): IShareXConfig {
return {
Name: "Lazy Uploader",
DestinationType: "ImageUploader, TextUploader, FileUploader",
RequestType: "POST",
RequestURL: "https://im.sleepdeprived.wtf/api/upload/",
Headers: {
key,
},
FileFormName: "sharex",
ResponseType: "Text",
URL: "https://im.sleepdeprived.wtf/$json:url$",
};
}

function sendShareXConfig(res: Response, config: IShareXConfig): void {
const file = JSON.stringify(config, null, 2);
const fileName = "sharex-config.sxcu";

res.setHeader("Content-disposition", `attachment; filename=${fileName}`);
res.setHeader("Content-type", "application/json");

res.send(file);
}

export default router;
23 changes: 4 additions & 19 deletions src/routes/api/upload.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,14 @@ import { Router, type Request, type Response } from "express";
import path from "path";
import config from "../../config";
import fs from "fs";
import { keys as keyFunctions } from "../../functions";
import { type IKeys } from "../../functions/keys";

interface IUploadedFile {
name: string;
mv: (path: string, callback?: (err: Error | null) => void) => void;
}

interface IKeys {
key: string;
ip: any;
created_at: string;
}

const router: Router = Router();

router.post("/", (req: Request, res: Response) => {
Expand All @@ -22,7 +18,7 @@ router.post("/", (req: Request, res: Response) => {
key: string;
};

const keys = JSON.parse(fs.readFileSync("keys.json", "utf8"));
const keys = keyFunctions.loadKeysFromFile();

if (!keys.some((k: IKeys) => k.key === key)) {
return res.status(403).send({
Expand All @@ -44,7 +40,7 @@ router.post("/", (req: Request, res: Response) => {

const singleSharex = Array.isArray(sharex) ? sharex[0] : sharex;
const ext = path.extname(singleSharex.name);
const name = generateRandomName(10);
const name = keyFunctions.generateRandomKey(10);
const dir = config.dirs[Math.floor(Math.random() * config.dirs.length)];
const ip = req.headers["x-forwarded-for"] || req.socket.remoteAddress;

Expand Down Expand Up @@ -93,15 +89,4 @@ router.post("/", (req: Request, res: Response) => {
}
});

function generateRandomName(length: number): string {
let result = "";
const characters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
const charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(Math.floor(Math.random() * charactersLength));
}
return result;
}

export default router;
38 changes: 8 additions & 30 deletions src/routes/index/index.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,12 @@
"use stroct";

import { Router, type Request, type Response } from "express";
import fs from "fs";
import path from "path";
import config from "../../config";
import { images as imgFunctions } from "../../functions";

const router: Router = Router();
const uploadsDir = getPath("./uploads");

function getPath(dir: string): string {
return path.resolve(process.cwd(), dir);
}

function renderError(res: Response, status: number, message: string) {
res.status(status).json({
error: true,
status,
message,
});
}

function findFileWithoutExtension(
fileName: string,
dirPath: string
): string | null {
const fileWithoutExtension = fileName.replace(/\.[^.]+$/, "");
const files = fs.readdirSync(dirPath);

return (
files.find(
(file) => fileWithoutExtension === file.replace(/\.[^.]+$/, "")
) || null
);
}
const uploadsDir = imgFunctions.getPath("./uploads");

router.get("/", (req: Request, res: Response) => {
return res.render("uploader", {
Expand All @@ -42,10 +16,14 @@ router.get("/", (req: Request, res: Response) => {

router.get("/:dir/:file", (req: Request, res: Response) => {
const { dir, file } = req.params;
const fileWithExtension = findFileWithoutExtension(file, uploadsDir);

const fileWithExtension = imgFunctions.findFileWithoutExtension(
file,
uploadsDir
);

if (!config.dirs.includes(dir) || !fileWithExtension)
return renderError(res, 404, "Content not found.");
return imgFunctions.renderError(res, 404, "Content not found.");

return res.render("img", {
name: fileWithExtension,
Expand Down
2 changes: 1 addition & 1 deletion uploader_files/flameshot/flameshot_uploader.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

API="https://im.horny.rip/api/upload/"
API_KEY="fuckurmom"
domains=(
DOMAINS=(
"https://im.sleepdeprived.wtf"
"https://ur.sleepdeprived.wtf"
"https://probably.sleepdeprived.wtf"
Expand Down

0 comments on commit 59535c9

Please sign in to comment.