From 0df4964e14de773278de96594aa5cc001436bf37 Mon Sep 17 00:00:00 2001 From: taisan <131413638+taisan11@users.noreply.github.com> Date: Thu, 20 Jun 2024 18:36:33 +0900 Subject: [PATCH 01/12] update dep --- bun.lockb | Bin 74790 -> 74778 bytes package.json | 4 ++-- src/{BBS.tsx => UI.tsx} | 0 src/serch.tsx | 0 src/server.ts | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) rename src/{BBS.tsx => UI.tsx} (100%) delete mode 100644 src/serch.tsx diff --git a/bun.lockb b/bun.lockb index ac0cee209d743d0e9ddd2089729bb434bb8b611c..ad4e7745491a7046ba302f97688f119c80e75541 100755 GIT binary patch delta 6338 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 O%hoKU{QXF_;=ceP#F*Cr diff --git a/package.json b/package.json index 2c80ecc..994dda1 100644 --- a/package.json +++ b/package.json @@ -5,14 +5,14 @@ "dependencies": { "@hono/valibot-validator": "^0.2.5", "drizzle-orm": "^0.30.10", - "hono": "^4.4.4", + "hono": "^4.4.7", "iconv-cp932": "^1.2.2", "pathe": "^1.1.2", "std-env": "^3.7.0", "unenv": "^1.9.0", "unix-crypt-td-js": "^1.1.4", "unstorage": "^1.10.2", - "valibot": "^0.31.0" + "valibot": "^0.31.1" }, "devDependencies": { "@types/bun": "latest", diff --git a/src/BBS.tsx b/src/UI.tsx similarity index 100% rename from src/BBS.tsx rename to src/UI.tsx diff --git a/src/serch.tsx b/src/serch.tsx deleted file mode 100644 index e69de29..0000000 diff --git a/src/server.ts b/src/server.ts index 21acefe..9a20a61 100644 --- a/src/server.ts +++ b/src/server.ts @@ -3,7 +3,7 @@ import { serveStatic } from 'hono/bun' import type { SocketAddress } from 'bun' import { trimTrailingSlash } from 'hono/trailing-slash' import { logger } from 'hono/logger' -import BBS from './BBS' +import BBS from './UI' // import TBS from './TBS' import admin from './admin' // import API from './api' From 6011b90ce3db9af9a267b538b71bb4d35ae7f5dc Mon Sep 17 00:00:00 2001 From: taisan <131413638+taisan11@users.noreply.github.com> Date: Thu, 20 Jun 2024 18:50:41 +0900 Subject: [PATCH 02/12] =?UTF-8?q?=E3=81=A1=E3=82=87=E3=81=A3=E3=81=A8?= =?UTF-8?q?=E3=81=A4=E3=81=A5=E5=9E=8B=E3=82=92=E4=BB=98=E3=81=91=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- originUI/.gitignore | 24 ------- originUI/bun.lockb | Bin 20068 -> 0 bytes originUI/index.html | 13 ---- originUI/package.json | 15 ----- originUI/public/UI.ts | 3 - originUI/public/vite.svg | 1 - originUI/readme.md | 2 - originUI/src/counter.ts | 9 --- originUI/src/main.ts | 24 ------- originUI/src/style.css | 96 ---------------------------- originUI/src/typescript.svg | 1 - originUI/src/vite-env.d.ts | 1 - originUI/tsconfig.json | 23 ------- src/TBS.tsx | 0 src/admin.tsx | 49 -------------- src/api.ts | 12 ++++ src/module/storage.ts | 29 +++++++-- src/module/storage/unstrage-base.ts | 2 +- src/server.ts | 4 +- 19 files changed, 39 insertions(+), 269 deletions(-) delete mode 100644 originUI/.gitignore delete mode 100644 originUI/bun.lockb delete mode 100644 originUI/index.html delete mode 100644 originUI/package.json delete mode 100644 originUI/public/UI.ts delete mode 100644 originUI/public/vite.svg delete mode 100644 originUI/readme.md delete mode 100644 originUI/src/counter.ts delete mode 100644 originUI/src/main.ts delete mode 100644 originUI/src/style.css delete mode 100644 originUI/src/typescript.svg delete mode 100644 originUI/src/vite-env.d.ts delete mode 100644 originUI/tsconfig.json delete mode 100644 src/TBS.tsx delete mode 100644 src/admin.tsx diff --git a/originUI/.gitignore b/originUI/.gitignore deleted file mode 100644 index a547bf3..0000000 --- a/originUI/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/originUI/bun.lockb b/originUI/bun.lockb deleted file mode 100644 index 193a1d40dc4b165f8b8120d08b313d5d7aa86dfd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20068 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 H-@pF@ELC!3 diff --git a/originUI/index.html b/originUI/index.html deleted file mode 100644 index e25cbee..0000000 --- a/originUI/index.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - Vite + TS - - -
- - - diff --git a/originUI/package.json b/originUI/package.json deleted file mode 100644 index dba3e03..0000000 --- a/originUI/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "originui", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "preview": "vite preview" - }, - "devDependencies": { - "typescript": "^5.2.2", - "vite": "^5.2.0" - } -} diff --git a/originUI/public/UI.ts b/originUI/public/UI.ts deleted file mode 100644 index e7a9b98..0000000 --- a/originUI/public/UI.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { Hono } from "hono"; - -const app = new Hono() \ No newline at end of file diff --git a/originUI/public/vite.svg b/originUI/public/vite.svg deleted file mode 100644 index e7b8dfb..0000000 --- a/originUI/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/originUI/readme.md b/originUI/readme.md deleted file mode 100644 index b70ab87..0000000 --- a/originUI/readme.md +++ /dev/null @@ -1,2 +0,0 @@ -# UI作る -SSRで情報を埋め込むためどうにかする。 \ No newline at end of file diff --git a/originUI/src/counter.ts b/originUI/src/counter.ts deleted file mode 100644 index 09e5afd..0000000 --- a/originUI/src/counter.ts +++ /dev/null @@ -1,9 +0,0 @@ -export function setupCounter(element: HTMLButtonElement) { - let counter = 0 - const setCounter = (count: number) => { - counter = count - element.innerHTML = `count is ${counter}` - } - element.addEventListener('click', () => setCounter(counter + 1)) - setCounter(0) -} diff --git a/originUI/src/main.ts b/originUI/src/main.ts deleted file mode 100644 index 791547b..0000000 --- a/originUI/src/main.ts +++ /dev/null @@ -1,24 +0,0 @@ -import './style.css' -import typescriptLogo from './typescript.svg' -import viteLogo from '/vite.svg' -import { setupCounter } from './counter.ts' - -document.querySelector('#app')!.innerHTML = ` -
- - - - - - -

Vite + TypeScript

-
- -
-

- Click on the Vite and TypeScript logos to learn more -

-
-` - -setupCounter(document.querySelector('#counter')!) diff --git a/originUI/src/style.css b/originUI/src/style.css deleted file mode 100644 index f9c7350..0000000 --- a/originUI/src/style.css +++ /dev/null @@ -1,96 +0,0 @@ -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -#app { - max-width: 1280px; - margin: 0 auto; - padding: 2rem; - text-align: center; -} - -.logo { - height: 6em; - padding: 1.5em; - will-change: filter; - transition: filter 300ms; -} -.logo:hover { - filter: drop-shadow(0 0 2em #646cffaa); -} -.logo.vanilla:hover { - filter: drop-shadow(0 0 2em #3178c6aa); -} - -.card { - padding: 2em; -} - -.read-the-docs { - color: #888; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/originUI/src/typescript.svg b/originUI/src/typescript.svg deleted file mode 100644 index d91c910..0000000 --- a/originUI/src/typescript.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/originUI/src/vite-env.d.ts b/originUI/src/vite-env.d.ts deleted file mode 100644 index 11f02fe..0000000 --- a/originUI/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/originUI/tsconfig.json b/originUI/tsconfig.json deleted file mode 100644 index 75abdef..0000000 --- a/originUI/tsconfig.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "module": "ESNext", - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "skipLibCheck": true, - - /* Bundler mode */ - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - - /* Linting */ - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"] -} diff --git a/src/TBS.tsx b/src/TBS.tsx deleted file mode 100644 index e69de29..0000000 diff --git a/src/admin.tsx b/src/admin.tsx deleted file mode 100644 index 27a3fc4..0000000 --- a/src/admin.tsx +++ /dev/null @@ -1,49 +0,0 @@ -import { Hono } from "hono"; -import { jsxRenderer } from "hono/jsx-renderer"; -import { getSubject, getSubjecttxt, getThread, getdat } from "./module/storage"; -import { kakiko } from "./module/kakiko"; -import { config } from "./module/config"; -import { basicAuth } from 'hono/basic-auth' - -declare module "hono" { - interface ContextRenderer { - (content: string | Promise, props: { title?: string }): Response; - } -} - -const app = new Hono(); - -app.use('/admin.cgi',basicAuth({username:config().user.admin.name,password:config().user.admin.password})) - -app.get( - "*", - jsxRenderer(({ children, title }) => { - return ( - - - - - {title} - - {children} - - ); - }), -); - -app.get(`${config().preference.site.InstDIR}/admin.cgi`, async (c) => { - return c.render( - <> -

管理画面

-

管理画面

-

version:V0.0.1

-

Git Hash:{}

- , - { title: "管理画面" }, - ); -}) - -export default app; diff --git a/src/api.ts b/src/api.ts index 46d942e..d6b17e7 100644 --- a/src/api.ts +++ b/src/api.ts @@ -58,5 +58,17 @@ app.get("/thread/:BBSKEY/:ThID",async(c)=>{ } return c.json(THD.date) }) +app.get("/thread/:BBSKEY/:ThID/:res",async(c)=>{ + const BBSKEY = c.req.param().BBSKEY + const ThID = c.req.param().ThID + const res = c.req.param().res + const THD = await getThread(BBSKEY,ThID) + if (!THD?.has) { + return c.json({"error":"スレッドがねえ"}) + } + if (!THD.date.date[postid]) { + return c.json({"error":"レスがねえ"}) + } +}) export default app; \ No newline at end of file diff --git a/src/module/storage.ts b/src/module/storage.ts index 2d44871..1703642 100644 --- a/src/module/storage.ts +++ b/src/module/storage.ts @@ -17,7 +17,6 @@ export type NewThreadParams = { title: string; id: string; }; - export type PostThreadParams = { name: string; mail: string; @@ -25,27 +24,47 @@ export type PostThreadParams = { date: string; id: string; }; +export type getThreadReturn = { + has: boolean; + data: { + title: string; + post: { + postid: string; + name: string; + mail: string; + date: string; + message: string; + }[]; + } +}; +export type getSubjectReturn = { + has: boolean; + data: { [key: string]: [string, string] }; +}; const driver = config().preference.site.driver; -export async function addSubject(BBSKEY:string,date: string, title: string,id: string) { +export async function addSubject(BBSKEY:string,date: string, title: string,id: string): Promise{ if (driver === "unstorage") { return await addSubject_file(BBSKEY,date, title,id) } } -export async function DeleteOldSubject(BBSKEY:string,) { +export async function DeleteOldSubject(BBSKEY:string,): Promise{ if (driver === "unstorage") { return await DeleteOldSubject_file(BBSKEY) } } -export async function getSubjecttxt(BBSKEY:string,) { +export async function getSubjecttxt(BBSKEY:string,): Promise{ if (driver === "unstorage") { return await getSubjecttxt_file(BBSKEY) } + return "" } -export async function getSubject(BBSKEY:string,) { +export async function getSubject(BBSKEY:string,): Promise{ if (driver === "unstorage") { + //@ts-ignore return await getSubject_file(BBSKEY) } + return {has:false,data:{}} } export async function NewThread(BBSKEY:string,{ name, mail, message, date, title, id }: NewThreadParams) { diff --git a/src/module/storage/unstrage-base.ts b/src/module/storage/unstrage-base.ts index 75267f5..4a3439a 100644 --- a/src/module/storage/unstrage-base.ts +++ b/src/module/storage/unstrage-base.ts @@ -40,7 +40,7 @@ export async function getSubject_file(BBSKEY:string,) { export async function getSubjecttxt_file(BBSKEY:string,) { const storage = createStorage(drives); const SUBTXT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); - return SUBTXT; + return String(SUBTXT); } export async function NewThread_file(BBSKEY:string,{ name, mail, message, date, title, id }: NewThreadParams) { const storage = createStorage(drives); diff --git a/src/server.ts b/src/server.ts index 9a20a61..60cb102 100644 --- a/src/server.ts +++ b/src/server.ts @@ -5,7 +5,7 @@ import { trimTrailingSlash } from 'hono/trailing-slash' import { logger } from 'hono/logger' import BBS from './UI' // import TBS from './TBS' -import admin from './admin' +// import admin from './admin' // import API from './api' type Bindings = { @@ -23,7 +23,7 @@ app.use(logger(customLogger)) // app.route("/TBS", TBS); // app.route("/api",API) app.route("/", BBS); -app.route("/",admin) +// app.route("/",admin) // app.get('*', serveStatic({root: './html'})) const server = Bun.serve({ From 27b6bc90fe7fce5d93ba9b8dec18e19c5bfd336d Mon Sep 17 00:00:00 2001 From: taisan11 <131413638+taisan11@users.noreply.github.com> Date: Fri, 21 Jun 2024 14:00:31 +0900 Subject: [PATCH 03/12] =?UTF-8?q?=E5=9E=8B=E4=BB=98=E3=81=AA=E3=81=A9?= =?UTF-8?q?=E3=82=92=E5=AE=8C=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bun.lockb | Bin 74778 -> 74778 bytes src/UI.tsx | 6 ++--- src/api.ts | 8 +++---- src/module/pase.ts | 2 +- src/module/storage.ts | 19 +++++++++------ src/module/storage/unstrage-base.ts | 36 ++++++++++++++-------------- 6 files changed, 38 insertions(+), 33 deletions(-) diff --git a/bun.lockb b/bun.lockb index ad4e7745491a7046ba302f97688f119c80e75541..b460bfb18447ea4a4298b3290e242ca5e5d080d2 100755 GIT binary patch delta 22 ecmbPrf@RhTmJRKv8O9?Qj5k{R+hZ delta 22 ecmbPrf@RhTmJRKv8BHd4oZiN0u-X31?Qj5k(+a@= diff --git a/src/UI.tsx b/src/UI.tsx index e375f36..917ce6d 100644 --- a/src/UI.tsx +++ b/src/UI.tsx @@ -162,7 +162,7 @@ app.get(`${config().preference.site.InstDIR}/read.cgi/:BBSKEY/:THID`, async (c) const BBSKEY = c.req.param("BBSKEY"); const THID = c.req.param("THID"); const THD = await getThread(BBSKEY,THID) - if (!THD?.has) { + if (!THD.has) { return c.render( <>

READ.CGI for BBS.TSX by Och

@@ -185,11 +185,11 @@ app.get(`${config().preference.site.InstDIR}/read.cgi/:BBSKEY/:THID`, async (c)

- {JSON.parse(THD.date).title} + {THD.data.title}

{//@ts-ignore - JSON.parse(THD.date).post.map((post) => ( + THD.data.post.map((post) => ( <>
{post.postid} : diff --git a/src/api.ts b/src/api.ts index d6b17e7..22d4db0 100644 --- a/src/api.ts +++ b/src/api.ts @@ -56,7 +56,7 @@ app.get("/thread/:BBSKEY/:ThID",async(c)=>{ if (!THD?.has) { return c.json({"error":"スレッドがねえ"}) } - return c.json(THD.date) + return c.json(THD.data) }) app.get("/thread/:BBSKEY/:ThID/:res",async(c)=>{ const BBSKEY = c.req.param().BBSKEY @@ -66,9 +66,9 @@ app.get("/thread/:BBSKEY/:ThID/:res",async(c)=>{ if (!THD?.has) { return c.json({"error":"スレッドがねえ"}) } - if (!THD.date.date[postid]) { - return c.json({"error":"レスがねえ"}) - } + // if (!THD.data.post[]) { + // return c.json({"error":"レスがねえ"}) + // } }) export default app; \ No newline at end of file diff --git a/src/module/pase.ts b/src/module/pase.ts index 31b4ffd..817a3ae 100644 --- a/src/module/pase.ts +++ b/src/module/pase.ts @@ -18,7 +18,7 @@ export function subjectpaser(subjecttxt: string): { [key: string]: [string, stri * @param {string} dattxt * @returns {string} */ -export function datpaser(dattxt: string) { +export function datpaser(dattxt: string):string { const lines = dattxt.split("\n"); const posts: any[] = []; let title = ""; diff --git a/src/module/storage.ts b/src/module/storage.ts index 1703642..dfe5e20 100644 --- a/src/module/storage.ts +++ b/src/module/storage.ts @@ -8,7 +8,6 @@ export type Subject = { date: Date; title: string; }; - export type NewThreadParams = { name: string; mail: string; @@ -41,6 +40,10 @@ export type getSubjectReturn = { has: boolean; data: { [key: string]: [string, string] }; }; +export type postReturn = { + sc:boolean, + redirect:string +} const driver = config().preference.site.driver; export async function addSubject(BBSKEY:string,date: string, title: string,id: string): Promise{ if (driver === "unstorage") { @@ -66,26 +69,28 @@ export async function getSubject(BBSKEY:string,): Promise{ } return {has:false,data:{}} } - -export async function NewThread(BBSKEY:string,{ name, mail, message, date, title, id }: NewThreadParams) { +export async function NewThread(BBSKEY:string,{ name, mail, message, date, title, id }: NewThreadParams):Promise { if (driver === "unstorage") { return await NewThread_file(BBSKEY,{ name, mail, message, date, title, id }) } + return {sc:false,redirect:"/test"} } - -export async function postThread(BBSKEY:string,{ name, mail, message, date, id }: PostThreadParams) { +export async function postThread(BBSKEY:string,{ name, mail, message, date, id }: PostThreadParams):Promise { if (driver === "unstorage") { return await postThread_file(BBSKEY,{ name, mail, message, date, id }) } + return {sc:false,redirect:"/test"} } -export async function getThread(BBSKEY:string,id: string) { +export async function getThread(BBSKEY:string,id: string):Promise { if (driver === "unstorage") { return await getThread_file(BBSKEY,id) } + return {data:{"title":"",post:[]},has:false} } -export async function getdat(BBSKEY:string,idextension: string) { +export async function getdat(BBSKEY:string,idextension: string):Promise { if (driver === "unstorage") { return await getdat_file(BBSKEY,idextension) } + return "" } \ No newline at end of file diff --git a/src/module/storage/unstrage-base.ts b/src/module/storage/unstrage-base.ts index 4a3439a..b75bd67 100644 --- a/src/module/storage/unstrage-base.ts +++ b/src/module/storage/unstrage-base.ts @@ -2,7 +2,7 @@ import { createStorage } from "unstorage"; import fsDriver from "unstorage/drivers/fs"; import { config } from "../config"; import { subjectpaser,datpaser } from "../pase"; -import { NewThreadParams,PostThreadParams } from "../storage"; +import { NewThreadParams,PostThreadParams, getSubjectReturn, getThreadReturn, postReturn } from "../storage"; import * as IconvCP932 from "iconv-cp932"; const drives = {driver:config().preference.site.UnstorageOptions} || {driver:fsDriver({ base: "./data" })}; @@ -11,13 +11,13 @@ export function writedat(dat: string, datname: string) { const storage = createStorage(drives); } -export async function addSubject_file(BBSKEY:string,date: string, title: string,id: string) { +export async function addSubject_file(BBSKEY:string,date: string, title: string,id: string):Promise { const storage = createStorage(drives); const SUBJECT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); await storage.setItem(`${BBSKEY}/SUBJECT.TXT`, `${id}.dat<>${title} (0)\n${SUBJECT}`); } -export async function DeleteOldSubject_file(BBSKEY:string,) { +export async function DeleteOldSubject_file(BBSKEY:string,):Promise { const storage = createStorage(drives); const SUBJECT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); //@ts-ignore @@ -27,43 +27,43 @@ export async function DeleteOldSubject_file(BBSKEY:string,) { const newSubject = newLines.join('\n'); await storage.setItem(`${BBSKEY}/SUBJECT.TXT`, newSubject); } - -export async function getSubject_file(BBSKEY:string,) { +export async function getSubjecttxt_file(BBSKEY:string,):Promise { + const storage = createStorage(drives); + const SUBTXT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); + return String(SUBTXT); +} +export async function getSubject_file(BBSKEY:string,):Promise { const storage = createStorage(drives); const SUBTXT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); const HASSUB = await storage.hasItem(`${BBSKEY}/SUBJECT.TXT`); if (!HASSUB) { + //@ts-ignore return {'data':[],'has':HASSUB}; } return {'data':subjectpaser(String(SUBTXT)),'has':HASSUB}; } -export async function getSubjecttxt_file(BBSKEY:string,) { - const storage = createStorage(drives); - const SUBTXT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); - return String(SUBTXT); -} -export async function NewThread_file(BBSKEY:string,{ name, mail, message, date, title, id }: NewThreadParams) { +export async function NewThread_file(BBSKEY:string,{ name, mail, message, date, title, id }: NewThreadParams):Promise { const storage = createStorage(drives); await storage.setItem(`${BBSKEY}/dat/${id}.dat`, `${name}<>${mail}<>${date}<>${message}<>${title}`); await addSubject_file(BBSKEY,date, title,id); - return { 'sc': 'ok', 'redirect': `/${config().preference.site.InstDIR}/read.cgi/${BBSKEY}/${id}` }; + return { 'sc': true, 'redirect': `/${config().preference.site.InstDIR}/read.cgi/${BBSKEY}/${id}` }; } -export async function postThread_file(BBSKEY:string,{ name, mail, message, date, id }: PostThreadParams) { +export async function postThread_file(BBSKEY:string,{ name, mail, message, date, id }: PostThreadParams):Promise { const storage = createStorage(drives); const THDATTXT = await storage.getItem(`${BBSKEY}/dat/${id}.dat`); await storage.setItem(`${BBSKEY}/dat/${id}.dat`, `${THDATTXT}\n${name}<>${mail}<>${date}<>${message}`); - return {'sc':'ok','redirect':`/${config().preference.site.InstDIR}/read.cgi/${BBSKEY}/${id}`}; + return {'sc':true,'redirect':`/${config().preference.site.InstDIR}/read.cgi/${BBSKEY}/${id}`}; } -export async function getThread_file(BBSKEY:string,id: string) { +export async function getThread_file(BBSKEY:string,id: string):Promise { const storage = createStorage(drives); const dat = await storage.getItem(`${BBSKEY}/dat/${id}.dat`); const hasdat= await storage.hasItem(`${BBSKEY}/dat/${id}.dat`); - return {'date':datpaser(String(dat)),has:hasdat}; + return {'data':JSON.parse(datpaser(String(dat))),has:hasdat}; } -export async function getdat_file(BBSKEY:string,idextension: string) { +export async function getdat_file(BBSKEY:string,idextension: string):Promise { const storage = createStorage(drives); const dat = await storage.getItem(`${BBSKEY}/dat/${idextension}.dat`); - return dat + return String(dat) } \ No newline at end of file From 6275a6153ec497e6afb6e3ba0e88952d6bb05ffb Mon Sep 17 00:00:00 2001 From: taisan11 <131413638+taisan11@users.noreply.github.com> Date: Fri, 21 Jun 2024 16:05:03 +0900 Subject: [PATCH 04/12] =?UTF-8?q?@ts-ignore=E3=82=92=E5=89=8A=E9=99=A4=20?= =?UTF-8?q?=E5=9E=8B=E3=82=A8=E3=83=A9=E3=83=BC=E3=82=92=E7=9B=B4=E3=81=97?= =?UTF-8?q?=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/UI.tsx | 5 +---- src/global.d.ts | 1 + src/module/KAS.ts | 3 +-- src/module/storage.ts | 1 - src/module/storage/unstrage-base.ts | 10 +++------- 5 files changed, 6 insertions(+), 14 deletions(-) create mode 100644 src/global.d.ts diff --git a/src/UI.tsx b/src/UI.tsx index 917ce6d..8b96b43 100644 --- a/src/UI.tsx +++ b/src/UI.tsx @@ -188,7 +188,7 @@ app.get(`${config().preference.site.InstDIR}/read.cgi/:BBSKEY/:THID`, async (c) {THD.data.title}
- {//@ts-ignore + { THD.data.post.map((post) => ( <>
@@ -268,9 +268,7 @@ app.get('/:BBSKEY', async (c) => { })}); app.get('/:BBSKEY/subject.txt', async (c) => { const BBSKEY = c.req.param("BBSKEY"); - //@ts-ignore c.header("Content-Type", "text/plain; charset=Shift_JIS"); - //@ts-ignore return c.body(await getSubjecttxt(BBSKEY)) }) app.get('/:BBSKEY/dat/:THIDextension', async (c) => { @@ -278,7 +276,6 @@ app.get('/:BBSKEY/dat/:THIDextension', async (c) => { const THIDextension = c.req.param("THIDextension"); const dat = await getdat(BBSKEY,THIDextension) c.header("Content-Type", "text/plain; charset=Shift_JIS"); - //@ts-ignore return c.body(dat) }) diff --git a/src/global.d.ts b/src/global.d.ts new file mode 100644 index 0000000..cfc7ce1 --- /dev/null +++ b/src/global.d.ts @@ -0,0 +1 @@ +declare module 'unix-crypt-td-js'; \ No newline at end of file diff --git a/src/module/KAS.ts b/src/module/KAS.ts index b422e74..06f4dee 100644 --- a/src/module/KAS.ts +++ b/src/module/KAS.ts @@ -1,4 +1,3 @@ -//@ts-ignore import { createTripByKey } from "./trip"; function formatUnixTime(unixTime: number): string { @@ -74,7 +73,7 @@ async function NES(input: string, mail: string): Promise<{ name: string, mail: s const convertedInput = input.replace(/[◆★\n]/g, function (m) { return map[m]; }); let trip = ''; if (length > 0) { - trip = `◆`+await createTripByKey(match[1]); + trip = `◆`+await createTripByKey(match![1]); // trip = `◆` + `現在一時的にトリップは使用できません` } return { "name": `${convertedInput.replace(/#.*/, '')}${trip}`, "mail": mail } diff --git a/src/module/storage.ts b/src/module/storage.ts index dfe5e20..30adfd5 100644 --- a/src/module/storage.ts +++ b/src/module/storage.ts @@ -64,7 +64,6 @@ export async function getSubjecttxt(BBSKEY:string,): Promise{ } export async function getSubject(BBSKEY:string,): Promise{ if (driver === "unstorage") { - //@ts-ignore return await getSubject_file(BBSKEY) } return {has:false,data:{}} diff --git a/src/module/storage/unstrage-base.ts b/src/module/storage/unstrage-base.ts index b75bd67..a3a81ad 100644 --- a/src/module/storage/unstrage-base.ts +++ b/src/module/storage/unstrage-base.ts @@ -3,7 +3,6 @@ import fsDriver from "unstorage/drivers/fs"; import { config } from "../config"; import { subjectpaser,datpaser } from "../pase"; import { NewThreadParams,PostThreadParams, getSubjectReturn, getThreadReturn, postReturn } from "../storage"; -import * as IconvCP932 from "iconv-cp932"; const drives = {driver:config().preference.site.UnstorageOptions} || {driver:fsDriver({ base: "./data" })}; @@ -20,10 +19,8 @@ export async function addSubject_file(BBSKEY:string,date: string, title: string, export async function DeleteOldSubject_file(BBSKEY:string,):Promise { const storage = createStorage(drives); const SUBJECT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); - //@ts-ignore - const lines = SUBJECT.split('\n'); - //@ts-ignore - const newLines = lines.slice(0, config().preference.limit.MaxSubject); // Keep the first 10 lines + const lines = String(SUBJECT).split('\n'); + const newLines = lines.slice(0, config()!.preference!.limit!.MaxSubject); // Keep the first 10 lines const newSubject = newLines.join('\n'); await storage.setItem(`${BBSKEY}/SUBJECT.TXT`, newSubject); } @@ -37,8 +34,7 @@ export async function getSubject_file(BBSKEY:string,):Promise const SUBTXT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); const HASSUB = await storage.hasItem(`${BBSKEY}/SUBJECT.TXT`); if (!HASSUB) { - //@ts-ignore - return {'data':[],'has':HASSUB}; + return {'data':{'a':["a","a"]},'has':HASSUB}; } return {'data':subjectpaser(String(SUBTXT)),'has':HASSUB}; } From 1f9ef04763951f8336eb20b2b9db7df0e48fea6b Mon Sep 17 00:00:00 2001 From: taisan11 <131413638+taisan11@users.noreply.github.com> Date: Fri, 21 Jun 2024 16:16:23 +0900 Subject: [PATCH 05/12] =?UTF-8?q?ok,no=E3=82=92true,false=E3=81=AB?= =?UTF-8?q?=E5=A4=89=E3=81=88=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api.ts | 2 -- src/module/kakiko-api.ts | 30 +++++++++++++++--------------- src/module/kakiko.ts | 30 +++++++++++++++--------------- src/types.ts | 2 +- 4 files changed, 31 insertions(+), 33 deletions(-) diff --git a/src/api.ts b/src/api.ts index 22d4db0..8d6e4c3 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,9 +1,7 @@ import {Hono} from 'hono'; import { vValidator } from "@hono/valibot-validator"; import { newPost, newThread } from './types'; -import { kakiko } from './module/kakiko'; import { kakikoAPI } from './module/kakiko-api'; -import { subjectpaser } from './module/pase'; import { getSubject, getThread } from './module/storage'; const app = new Hono({}); diff --git a/src/module/kakiko-api.ts b/src/module/kakiko-api.ts index 631a603..690a61b 100644 --- a/src/module/kakiko-api.ts +++ b/src/module/kakiko-api.ts @@ -6,26 +6,26 @@ import { id } from "./id"; /** * @param c Hono Context * @param mode 新しいスレッドを立てるか、レスを書き込むか - * @returns {sc:'ok'|'no',redirect:string} 成功したか、リダイレクト先 + * @returns {sc:'ok'|false,redirect:string} 成功したか、リダイレクト先 */ -export async function kakikoAPI({ThTitle,name,mail,MESSAGE,BBSKEY,ThID}:{ThTitle?:string,name:string,mail:string,MESSAGE:string,BBSKEY:string,ThID?:string},c: Context, mode: 'newth' | 'kakiko'): Promise<{ sc: 'ok' | 'no', ThID: string }> { +export async function kakikoAPI({ThTitle,name,mail,MESSAGE,BBSKEY,ThID}:{ThTitle?:string,name:string,mail:string,MESSAGE:string,BBSKEY:string,ThID?:string},c: Context, mode: 'newth' | 'kakiko'): Promise<{ sc: boolean, ThID: string }> { const body = await c.req.parseBody() if (mode === 'newth') { const date = new Date();//時間 const ip = c.req.header('CF-Connecting-IP')//IP(cloudflare tunnel使えば行けるやろ) const UnixTime = String(date.getTime()).substring(0, 10)//UnixTime // 文字数制限など - if (name.length > 30) { return { 'sc': 'no', 'ThID': `error0` } } - if (!MESSAGE || MESSAGE.length > 300) { return { 'sc': 'no', 'ThID':"error1" } } - if (mail.length > 70) { return { 'sc': 'no', 'ThID': "error2" } } - if (!BBSKEY) { return { 'sc': 'no', 'ThID': "error3" } } - if (!ThTitle) { return { 'sc': 'no', 'ThID': "error5" } } + if (name.length > 30) { return { 'sc': false, 'ThID': `error0` } } + if (!MESSAGE || MESSAGE.length > 300) { return { 'sc': false, 'ThID':"error1" } } + if (mail.length > 70) { return { 'sc': false, 'ThID': "error2" } } + if (!BBSKEY) { return { 'sc': false, 'ThID': "error3" } } + if (!ThTitle) { return { 'sc': false, 'ThID': "error5" } } // 加工 const KASS = await KAS(MESSAGE, name, mail, Number(UnixTime)); // 保存 await NewThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+'testtests', title: ThTitle, id: UnixTime }); // 返す - return { 'sc': 'ok', 'ThID': `${BBSKEY}/${UnixTime}` }; + return { 'sc': true, 'ThID': `${BBSKEY}/${UnixTime}` }; } if (mode === 'kakiko') { // 内容物の取得 @@ -35,16 +35,16 @@ export async function kakikoAPI({ThTitle,name,mail,MESSAGE,BBSKEY,ThID}:{ThTitle // 変換 const KASS = await KAS(MESSAGE,name,mail,Number(UnixTime)); // 制限 - if (name.length > 30) { return { 'sc': 'no', 'ThID': `error0` } } - if (!MESSAGE || MESSAGE.length > 300) { return { 'sc': 'no', 'ThID':"error1" } } - if (mail.length > 70) { return { 'sc': 'no', 'ThID': "error2" } } - if (!BBSKEY) { return { 'sc': 'no', 'ThID': "error3" } } - if (!ThID) { return {'sc':'no','ThID':"error4"} } + if (name.length > 30) { return { 'sc': false, 'ThID': `error0` } } + if (!MESSAGE || MESSAGE.length > 300) { return { 'sc': false, 'ThID':"error1" } } + if (mail.length > 70) { return { 'sc': false, 'ThID': "error2" } } + if (!BBSKEY) { return { 'sc': false, 'ThID': "error3" } } + if (!ThID) { return {'sc':false,'ThID':"error4"} } const ID = await id(IP,BBSKEY); // 入力 await postThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+ID, id: ThID }); - return {'sc':'ok','ThID':`${BBSKEY}/${ThID}`}; + return {'sc':true,'ThID':`${BBSKEY}/${ThID}`}; } - return {sc:'no',ThID:'error999999999'} + return {sc:false,ThID:'error999999999'} } \ No newline at end of file diff --git a/src/module/kakiko.ts b/src/module/kakiko.ts index be9b027..64b1fcd 100644 --- a/src/module/kakiko.ts +++ b/src/module/kakiko.ts @@ -6,9 +6,9 @@ import { id } from "./id"; /** * @param c Hono Context * @param mode 新しいスレッドを立てるか、レスを書き込むか - * @returns {sc:'ok'|'no',redirect:string} 成功したか、リダイレクト先 + * @returns {sc:'ok'|false,redirect:string} 成功したか、リダイレクト先 */ -export async function kakiko(c: Context, mode: 'newth' | 'kakiko', base: string): Promise<{ sc: 'ok' | 'no', redirect: string }> { +export async function kakiko(c: Context, mode: 'newth' | 'kakiko', base: string): Promise<{ sc: boolean, redirect: string }> { const body = await c.req.parseBody() if (mode === 'newth') { // 内容物の取得 @@ -21,17 +21,17 @@ export async function kakiko(c: Context, mode: 'newth' | 'kakiko', base: string) const ip = c.req.header('CF-Connecting-IP')//IP(cloudflare tunnel使えば行けるやろ) const UnixTime = String(date.getTime()).substring(0, 10)//UnixTime // 文字数制限など - if (Name.length > 30) { return { 'sc': 'no', 'redirect': `/${base}/read.cgi/error?e=0` } } - if (!MESSAGE || MESSAGE.length > 300) { return { 'sc': 'no', 'redirect': `/${base}/read.cgi/error?e=1` } } - if (mail.length > 70) { return { 'sc': 'no', 'redirect': `/${base}/read.cgi/error?e=2` } } - if (!BBSKEY) { return { 'sc': 'no', 'redirect': `/${base}/read.cgi/error?e=3` } } - if (!ThTi) { return { 'sc': 'no', 'redirect': `/${base}/read.cgi/error?e=5` } } + if (Name.length > 30) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=0` } } + if (!MESSAGE || MESSAGE.length > 300) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=1` } } + if (mail.length > 70) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=2` } } + if (!BBSKEY) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=3` } } + if (!ThTi) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=5` } } // 加工 const KASS = await KAS(MESSAGE, Name, mail, Number(UnixTime)); // 保存 await NewThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+'testtests', title: ThTi, id: UnixTime }); // 返す - return { 'sc': 'ok', 'redirect': `/${base}/read.cgi/${BBSKEY}/${UnixTime}` }; + return { 'sc': true, 'redirect': `/${base}/read.cgi/${BBSKEY}/${UnixTime}` }; } if (mode === 'kakiko') { // 内容物の取得 @@ -46,16 +46,16 @@ export async function kakiko(c: Context, mode: 'newth' | 'kakiko', base: string) // 変換 const KASS = await KAS(MESSAGE,Name,mail,Number(UnixTime)); // 制限 - if (Name.length > 30) { return {'sc':'no','redirect':`/${base}/read.cgi/error?e=0`} } - if (!MESSAGE || MESSAGE.length > 300) { return {'sc':'no','redirect':`/${base}/read.cgi/error?e=1`} } - if (mail.length > 70) { return {'sc':'no','redirect':`/${base}/read.cgi/error?e=2`} } - if (!BBSKEY) { return {'sc':'no','redirect':`/${base}/read.cgi/error?e=3`} } - if (!THID) { return {'sc':'no','redirect':`/${base}/read.cgi/error?e=4`} } + if (Name.length > 30) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=0`} } + if (!MESSAGE || MESSAGE.length > 300) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=1`} } + if (mail.length > 70) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=2`} } + if (!BBSKEY) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=3`} } + if (!THID) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=4`} } const ID = await id(IP,BBSKEY); // 入力 await postThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+ID, id: THID }); - return {'sc':'ok','redirect':`/${base}/read.cgi/${BBSKEY}/${THID}`}; + return {'sc':true,'redirect':`/${base}/read.cgi/${BBSKEY}/${THID}`}; } - return {sc:'no',redirect:'/'} + return {sc:false,redirect:'/'} } \ No newline at end of file diff --git a/src/types.ts b/src/types.ts index b958384..4d286a7 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -import {object,string,number} from 'valibot' +import {object,string,number,pipe,array,date,trim,endsWith} from 'valibot' const v = {object,string,number} From d5ff34f8f689b5bbc30cfedf5af7e0b3d48dfb4b Mon Sep 17 00:00:00 2001 From: taisan11 <131413638+taisan11@users.noreply.github.com> Date: Fri, 21 Jun 2024 17:12:21 +0900 Subject: [PATCH 06/12] =?UTF-8?q?=E8=89=B2=E3=80=85update=20env.ts?= =?UTF-8?q?=E3=81=A7=E3=81=AFruntime=E3=81=94=E3=81=A8=E3=81=AE=E9=81=95?= =?UTF-8?q?=E3=81=84=E3=82=92=E5=90=B8=E5=8F=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api.ts | 1 + src/module/env.ts | 25 +++++++++++++++++++++++++ src/server.ts | 22 ++++++++++++++-------- 3 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 src/module/env.ts diff --git a/src/api.ts b/src/api.ts index 8d6e4c3..1d02381 100644 --- a/src/api.ts +++ b/src/api.ts @@ -68,5 +68,6 @@ app.get("/thread/:BBSKEY/:ThID/:res",async(c)=>{ // return c.json({"error":"レスがねえ"}) // } }) +app.get("/thread") export default app; \ No newline at end of file diff --git a/src/module/env.ts b/src/module/env.ts new file mode 100644 index 0000000..592dcfe --- /dev/null +++ b/src/module/env.ts @@ -0,0 +1,25 @@ +import { Context } from 'hono' +import { getRuntimeKey } from 'hono/adapter' +import { getConnInfo as getConnInfoBun } from 'hono/bun' +import { getConnInfo as getConnInfoCF } from 'hono/cloudflare-workers' +import type { ConnInfo } from 'hono/conninfo' +import { getConnInfo as getConnInfoDeno } from 'hono/deno' + +export function getConnInfo(c:Context):ConnInfo|void { + if (getRuntimeKey() === "bun") { + return getConnInfoBun(c) + } else if (getRuntimeKey() === "deno") { + return getConnInfoDeno(c) + } else if (getRuntimeKey() === "edge-light") { + return + } else if (getRuntimeKey() === "fastly") { + return + } else if (getRuntimeKey() === "node") { + return + } else if (getRuntimeKey() === "workerd") { + return getConnInfoCF(c) + } else if (getRuntimeKey() === "other") { + return + } + return +} diff --git a/src/server.ts b/src/server.ts index 60cb102..1d66ef6 100644 --- a/src/server.ts +++ b/src/server.ts @@ -3,10 +3,13 @@ import { serveStatic } from 'hono/bun' import type { SocketAddress } from 'bun' import { trimTrailingSlash } from 'hono/trailing-slash' import { logger } from 'hono/logger' +import { compress } from 'hono/compress' +import { cors } from 'hono/cors' +import { csrf } from 'hono/csrf' +import { etag } from 'hono/etag' +import { secureHeaders } from 'hono/secure-headers' import BBS from './UI' -// import TBS from './TBS' -// import admin from './admin' -// import API from './api' +import API from './api' type Bindings = { ip: SocketAddress @@ -18,13 +21,16 @@ app.use(trimTrailingSlash()) export const customLogger = (message: string, ...rest: string[]) => { console.log(message, ...rest) } + app.use(logger(customLogger)) -// 下記の2つは取り外し可能です -// app.route("/TBS", TBS); -// app.route("/api",API) +app.use(compress()) +app.use(cors()) +app.use(csrf()) +app.use(etag()) +app.use(secureHeaders()) + +app.route("/api",API) app.route("/", BBS); -// app.route("/",admin) -// app.get('*', serveStatic({root: './html'})) const server = Bun.serve({ port:'8000', From 4b6c3d638d029e6c94193267412783c779c797d6 Mon Sep 17 00:00:00 2001 From: taisan <131413638+taisan11@users.noreply.github.com> Date: Sat, 22 Jun 2024 12:18:53 +0900 Subject: [PATCH 07/12] =?UTF-8?q?API=E7=94=A8=E3=81=AE=E3=83=86=E3=82=B9?= =?UTF-8?q?=E3=83=88=E3=82=B3=E3=83=BC=E3=83=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api.ts | 7 ++----- src/server.ts | 2 +- test.ts | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 test.ts diff --git a/src/api.ts b/src/api.ts index 1d02381..b7830f7 100644 --- a/src/api.ts +++ b/src/api.ts @@ -9,7 +9,6 @@ const app = new Hono({}); app.get('/', (c) => { return c.text('掲示板APIだよ!!') }) - app.post( "/thread/:BBSKEY", vValidator("json", newThread, (result, c) => { @@ -59,14 +58,12 @@ app.get("/thread/:BBSKEY/:ThID",async(c)=>{ app.get("/thread/:BBSKEY/:ThID/:res",async(c)=>{ const BBSKEY = c.req.param().BBSKEY const ThID = c.req.param().ThID - const res = c.req.param().res + const res = Number(c.req.param().res) -1 const THD = await getThread(BBSKEY,ThID) if (!THD?.has) { return c.json({"error":"スレッドがねえ"}) } - // if (!THD.data.post[]) { - // return c.json({"error":"レスがねえ"}) - // } + return c.json(THD.data.post[res]) }) app.get("/thread") diff --git a/src/server.ts b/src/server.ts index 1d66ef6..ad6b141 100644 --- a/src/server.ts +++ b/src/server.ts @@ -23,7 +23,7 @@ export const customLogger = (message: string, ...rest: string[]) => { } app.use(logger(customLogger)) -app.use(compress()) +// app.use(compress()) app.use(cors()) app.use(csrf()) app.use(etag()) diff --git a/test.ts b/test.ts new file mode 100644 index 0000000..3f0d221 --- /dev/null +++ b/test.ts @@ -0,0 +1,16 @@ +async function test() { + const main = await fetch('http://localhost:8000/api') + await console.log(await main.text()) + const thread = await fetch('http://localhost:8000/api/thread/test') + await console.log(await thread.text()) + const thread2 = await fetch('http://localhost:8000/api/thread/test/1662626407') + await console.log(await thread2.text()) + const thread3 = await fetch('http://localhost:8000/api/thread/test/1662626407/1') + await console.log(await thread3.text()) + //POST!! + const thread4 = await fetch('http://localhost:8000/api/thread/test',{method:"POST",body:JSON.stringify({ThTitle:"test",name:"test",mail:"test",MESSAGE:"test",BBSKEY:"test"}),headers:{"Content-Type":"application/json"}}) + await console.log(await thread4.text()) + const thread5 = await fetch('http://localhost:8000/api/thread/test/1662626407',{method:"POST",body:JSON.stringify({THID:"1662626407",name:"test",mail:"test",MESSAGE:"test",BBSKEY:"test"}),headers:{"Content-Type":"application/json"}}) + await console.log(await thread5.text()) +} +test(); \ No newline at end of file From 86a0ba7fc122dbe79c7b14b144f7f970961f8305 Mon Sep 17 00:00:00 2001 From: taisan <131413638+taisan11@users.noreply.github.com> Date: Mon, 24 Jun 2024 17:01:54 +0900 Subject: [PATCH 08/12] =?UTF-8?q?=E3=81=84=E3=82=89=E3=81=AA=E3=81=84?= =?UTF-8?q?=E9=83=A8=E5=88=86=E3=82=92=E6=B6=88=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/create-test-file.ts | 85 ++++++-------------- src/UI.tsx | 95 ++--------------------- src/module/config.ts | 65 +++++----------- src/module/kakiko.ts | 26 +++---- src/module/storage/beta-unstorage-json.ts | 61 +++++++++++++++ src/module/storage/unstrage-base.ts | 8 +- src/server.ts | 6 +- 7 files changed, 130 insertions(+), 216 deletions(-) create mode 100644 src/module/storage/beta-unstorage-json.ts diff --git a/script/create-test-file.ts b/script/create-test-file.ts index dec3afb..d928c3b 100644 --- a/script/create-test-file.ts +++ b/script/create-test-file.ts @@ -1,6 +1,6 @@ import { createStorage } from "unstorage"; import fsDriver from "unstorage/drivers/fs"; -import { defaults } from "../src/module/config"; +// import { defaults } from "../src/module/config"; const testSUBJECT = `1662626407.dat<>★テスト (6)` const testDAT = `カワイイ名無しさん<><>2022/09/08(木) 17:40:07.67 ID:ddK5AOhd9<>テスト<>テスト @@ -10,78 +10,41 @@ dkwdkw<>ddwdwd<>2022/09/13(火) 15:46:37.98<>wdl,wldwdo<> カワイイ名無しさん<><>2023/12/05(火) 19:49:03.89 ID:y6nqYXKvF<>入管収容で国に賠償だの、「TΗE FOOLS」の伊藤耕氏か゛収容先刑務所員の過失で死亡して4300万円の賠償金が支払われたり、
毎度のことながらクソ公務員の過失責任を税金で肩代わりする理屈に合わないことやってんのな
入管税金泥棒施設の拡大を求めるとか,もはや最低て゛も入国税1000万円は徴収しないと割に合わねえた゛ろ
ブータンは迷惑料ならぬ観光税一泊3萬円なわけだか゛、日本も見習うべきなのは当然、
無駄に石油燃やしまくってエネ儿ギー価格暴騰させて氣候変動させて土砂崩れに洪水.暴風、猛暑、大雪にと災害連発させてる
JАLだのANAだのクソアイヌドゥだのクサイマークだのゴキフ゛リフライヤーだのジェットクサーだのJtBだのテロリストに
地球破壊税として、航空燃料税1KL1千萬圓、離発着税1回1億円,上空通過税1km100万円など課税して、
憲法違反,私権侵害、威力業務妨害に対する賠償金として月10万円のヘ゛-シックインカムやれや地球破壊税金泥棒クソテロ政府
(羽田]Ttps://www.call4.jp/info.php?type〓itеms&id=I0000062 , ttps://haneda-projеct.jimdofree.Com/
(成田)ttΡs://n-souonhigaisosУoudan.amebaownd.com/
(テロ組織)tTps://i.imgur.Com/hnli1ga.jPeg<> カワイイ名無しさん<><>2024/02/18(日) 03:40:18.23 ID:m1DgfUHyP<>能登半島に1兆円税金投入とか太平洋側の万里の壁並に狂ってるよな.維持にも莫大な税金が必要なわけた゛か゛原資はまだ生まれてもいない
労働省階級の子孫か゛支払うて゛あろう税金.日銀に株買わせて資本家階級の資産倍増させて1兆圓を超える圧倒的資産格差形成させた原資も
労働者階級の子孫か゛支払うであろう税金.國の借金ひとりあたり1000万圓とは要するに資本家階級の資産なわけた゛がまともな労働者階級は
資本家階級の奴隷なんか決して産み落とさないから人囗減少してる中.益々過疎化するそんな地方に莫大な税金投入
避難者2万人を1年間ナマポ化しても200億と2桁も違うわけた゛がそんな無駄な公共事業で潤うのもやはり献金た゛パ─ティ‐劵だと
癒着してる資本家階級と利権公務員,日銀高額ナマポの大企業は絶対倒産しないか゛小規模企業は賃上げなと゛論外、毎曰20社以上倒産
タタ゛メシ食える被災者か゛羨ましい現実,イノベ‐ションの源泉を根絶やしにしてGDPタ゛タ゛下がりに地球破壞するた゛けのポンコツ後進国に陥れて
価値生産どころか破壞て゛儲ける公務員は給料爆上げに全國航空騷音まみれにして威カ業務妨害と救いようのない腐敗国家にしたのか゛自民公明
(ref.) ttps://www.call4.jp/info.php?type=items&id=I0000062
ttps://haneda-project.jimdofree.com/ , ttps://flight-route.com/
ttps://n-souonhigaisosyoudan.amebaownd.com/<>` -const defaults_DB = { - 'caps':{ - 'admin':{ - 'name':'Admin', - 'pw':'Admin', - 'fullname':'Administrator', - 'description':'Administrator', - } - }, - 'user':{ - 'admin':{ - 'name':'admin', - 'password':'admin', - 'fullname':'Administrator', - 'admin':true +const defaults = `import fsDriver from "unstorage/drivers/fs"; +import { Config } from "../src/module/config"; + +const config:Config = { + caps:{ + admin:{ + name:'Admin', + pw:'Admin', + fullname:'Administrator', + description:'Administrator', } }, - 'preference':{ - 'site':{ - 'InstDIR':'/test', - 'KejibanConfigDIR':'..', - 'name':'Och', - 'use':'bun', - 'websocket':true, - 'API':true, - 'driver':"db", - 'UnstorageOptions':fsDriver({base:"./data"}), - 'dbOptin':'sqlite' - }, - 'limit':{ - 'MaxSubject':500, - 'MaxRes':1000, - 'MaxAnchor':10, - 'MaxErrorLog':500, - 'HostLog':500, - 'MaxUserWriteFailureLog':500, + preference:{ + site:{ + KejibanConfigDIR:'..', + name:'Och', + use:'bun', + websocket:true, + API:true, + driver:"unstorage", + UnstorageOptions:fsDriver({base:"./data"}), + dbOptin:"sqlite", }, - 'other':{ - 'header':{ - 'text':'レス検索', - 'link':'../test/search.cgi' - }, - 'URL':{ - 'GazoToIMG':false, - 'AuthLink':true, - 'CookieDateExp':30 - }, - 'saveformat':"file" - }, - 'display':{ - 'PRtext':'Och~おーちゃんねる~', - 'PRlink':'https://github.com/taisan11/Och', - 'kokuti':{ - 'inIndex':true, - 'inOther':false - } - }, - 'kisei':{ - '2jyuu':true, - 'ShortPostRegulationSec':0, - 'sinTorip':true, - } } } +export default config` + export async function setTestBBS(testSUBJECT:string,testDAT:string) { const storage = createStorage({driver: fsDriver({ base: "./data" }),}); await storage.setItem("/test/SUBJECT.TXT", testSUBJECT); console.log('TEST(subjectFile):',await storage.hasItem("/test/SUBJECT.TXT")) await storage.setItem("/test/dat/1662626407.dat", testDAT); console.log('TEST(datFile):',await storage.hasItem("/test/dat/1662626407.dat")) - await storage.setItem('system.config.ts', JSON.stringify(defaults)) + await storage.setItem('system.config.ts', defaults) // await storage.setItem('system.config.ts',JSON.stringify(defaults_DB)) console.log('TEST(configFile):',await storage.hasItem("/system.config.ts")) } diff --git a/src/UI.tsx b/src/UI.tsx index 8b96b43..8e9ffc9 100644 --- a/src/UI.tsx +++ b/src/UI.tsx @@ -32,40 +32,7 @@ app.get( }), ); -app.get(`${config().preference.site.InstDIR}/read.cgi/error`, async (c) => { - const e = c.req.query("e"); - let em = ""; - switch (e) { - case "0": - em = "名前が入力されていないか、30文字を超えています"; - break; - case "1": - em = "内容が入力されていないか、300文字を超えています"; - break; - case "2": - em = "メールが70文字を超えています"; - break; - case "3": - em = "BBSKEYがありません"; - break; - case "4": - em = "THIDがありません"; - break; - case "5": - em = "スレタイが入力されていません"; - break; - } - return c.render( - <> -

ERROR

-

えらーがきたぞー

-

{em}

- , - { title: "ERROR" }, - ); -}) - -app.get(`${config().preference.site.InstDIR}/read.cgi/:BBSKEY`, async (c) => { +app.get(`/:BBSKEY`, async (c) => { const URL = c.req.url; const BBSKEY = c.req.param("BBSKEY"); const SUBJECTJSON = await getSubject(BBSKEY); @@ -139,26 +106,23 @@ app.get(`${config().preference.site.InstDIR}/read.cgi/:BBSKEY`, async (c) => { ); }); -// app.post(`${config().preference.site.InstDIR}/bbs.cgi`, async (c) => { -// }) - //////////////////////// // ##現在の仕様のコーナー // 現在はですね、IPを方法がないので放置です // いつか実装したいです //////////////////////// // 書き込み -app.post(`${config().preference.site.InstDIR}/read.cgi/:BBSKEY/:THID`, async (c) => { - const kextuka = await kakiko(c,'kakiko','test'); +app.post(`/:BBSKEY/:THID`, async (c) => { + const kextuka = await kakiko(c,'kakiko'); return c.redirect(kextuka.redirect); }); // Newスレッド -app.post(`${config().preference.site.InstDIR}/read.cgi/:BBSKEY`, async (c) => { - const kextuka = await kakiko(c, "newth",'test'); +app.post(`/:BBSKEY`, async (c) => { + const kextuka = await kakiko(c, "newth"); return c.redirect(kextuka.redirect); }); -app.get(`${config().preference.site.InstDIR}/read.cgi/:BBSKEY/:THID`, async (c) => { +app.get(`/:BBSKEY/:THID`, async (c) => { const BBSKEY = c.req.param("BBSKEY"); const THID = c.req.param("THID"); const THD = await getThread(BBSKEY,THID) @@ -219,53 +183,6 @@ app.get(`${config().preference.site.InstDIR}/read.cgi/:BBSKEY/:THID`, async (c) ); }); -app.get('/:BBSKEY', async (c) => { - return c.render( - - - - - - - - - - - - - -
- - 楽しく雑談しよう。ただそれだけの場所です - - - -
-
- - クリックで救える命が…ないです(`・ω・´)シャキーン - -
- - 掲示板使用上の注意 -
- ・日本法に準拠する
- ・かといってがっちがちではない
- ・管理者Tに従う
-
-
- - - - - - レス検索 - - - - ,{ - 'title': "BBS" - })}); app.get('/:BBSKEY/subject.txt', async (c) => { const BBSKEY = c.req.param("BBSKEY"); c.header("Content-Type", "text/plain; charset=Shift_JIS"); diff --git a/src/module/config.ts b/src/module/config.ts index e82e2e8..a4684f2 100644 --- a/src/module/config.ts +++ b/src/module/config.ts @@ -9,17 +9,16 @@ export type Config = { description: string; }; }; - user?: { - [key:string]: { - name: string; - password: string; - fullname: string; - admin: boolean; - }; - }; + // user?: { + // [key:string]: { + // name: string; + // password: string; + // fullname: string; + // admin: boolean; + // }; + // }; preference: { site: { - InstDIR: string; KejibanConfigDIR: string; name: string; use?: RuntimeName|"other", @@ -49,19 +48,19 @@ export type Config = { }; saveformat: string; }; - display?: { - PRtext: string; - PRlink: string; - kokuti: { - inIndex: boolean; - inOther: boolean; - }; - }; - kisei?: { - "2jyuu": boolean; - ShortPostRegulationSec: number; - sinTorip: boolean; - }; + // display?: { + // PRtext: string; + // PRlink: string; + // kokuti: { + // inIndex: boolean; + // inOther: boolean; + // }; + // }; + // kisei?: { + // "2jyuu": boolean; + // ShortPostRegulationSec: number; + // sinTorip: boolean; + // }; }; }; @@ -74,17 +73,8 @@ export const defaults:Config = { 'description':'Administrator', } }, - 'user':{ - 'admin':{ - 'name':'admin', - 'password':'admin', - 'fullname':'Administrator', - 'admin':true - } - }, 'preference':{ 'site':{ - 'InstDIR':'/test', 'KejibanConfigDIR':'..', 'name':'Och', 'use':'bun', @@ -112,19 +102,6 @@ export const defaults:Config = { 'CookieDateExp':30 }, 'saveformat':"file" - }, - 'display':{ - 'PRtext':'Och~おーちゃんねる~', - 'PRlink':'https://github.com/taisan11/Och', - 'kokuti':{ - 'inIndex':true, - 'inOther':false - } - }, - 'kisei':{ - '2jyuu':true, - 'ShortPostRegulationSec':0, - 'sinTorip':true, } } } diff --git a/src/module/kakiko.ts b/src/module/kakiko.ts index 64b1fcd..3575382 100644 --- a/src/module/kakiko.ts +++ b/src/module/kakiko.ts @@ -8,7 +8,7 @@ import { id } from "./id"; * @param mode 新しいスレッドを立てるか、レスを書き込むか * @returns {sc:'ok'|false,redirect:string} 成功したか、リダイレクト先 */ -export async function kakiko(c: Context, mode: 'newth' | 'kakiko', base: string): Promise<{ sc: boolean, redirect: string }> { +export async function kakiko(c: Context, mode: 'newth' | 'kakiko'): Promise<{ sc: boolean, redirect: string }> { const body = await c.req.parseBody() if (mode === 'newth') { // 内容物の取得 @@ -21,17 +21,17 @@ export async function kakiko(c: Context, mode: 'newth' | 'kakiko', base: string) const ip = c.req.header('CF-Connecting-IP')//IP(cloudflare tunnel使えば行けるやろ) const UnixTime = String(date.getTime()).substring(0, 10)//UnixTime // 文字数制限など - if (Name.length > 30) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=0` } } - if (!MESSAGE || MESSAGE.length > 300) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=1` } } - if (mail.length > 70) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=2` } } - if (!BBSKEY) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=3` } } - if (!ThTi) { return { 'sc': false, 'redirect': `/${base}/read.cgi/error?e=5` } } + if (Name.length > 30) { return { 'sc': false, 'redirect': `/error?e=0` } } + if (!MESSAGE || MESSAGE.length > 300) { return { 'sc': false, 'redirect': `/error?e=1` } } + if (mail.length > 70) { return { 'sc': false, 'redirect': `/error?e=2` } } + if (!BBSKEY) { return { 'sc': false, 'redirect': `/error?e=3` } } + if (!ThTi) { return { 'sc': false, 'redirect': `/error?e=5` } } // 加工 const KASS = await KAS(MESSAGE, Name, mail, Number(UnixTime)); // 保存 await NewThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+'testtests', title: ThTi, id: UnixTime }); // 返す - return { 'sc': true, 'redirect': `/${base}/read.cgi/${BBSKEY}/${UnixTime}` }; + return { 'sc': true, 'redirect': `/${BBSKEY}/${UnixTime}` }; } if (mode === 'kakiko') { // 内容物の取得 @@ -46,15 +46,15 @@ export async function kakiko(c: Context, mode: 'newth' | 'kakiko', base: string) // 変換 const KASS = await KAS(MESSAGE,Name,mail,Number(UnixTime)); // 制限 - if (Name.length > 30) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=0`} } - if (!MESSAGE || MESSAGE.length > 300) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=1`} } - if (mail.length > 70) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=2`} } - if (!BBSKEY) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=3`} } - if (!THID) { return {'sc':false,'redirect':`/${base}/read.cgi/error?e=4`} } + if (Name.length > 30) { return {'sc':false,'redirect':`/error?e=0`} } + if (!MESSAGE || MESSAGE.length > 300) { return {'sc':false,'redirect':`/error?e=1`} } + if (mail.length > 70) { return {'sc':false,'redirect':`/error?e=2`} } + if (!BBSKEY) { return {'sc':false,'redirect':`/error?e=3`} } + if (!THID) { return {'sc':false,'redirect':`/error?e=4`} } const ID = await id(IP,BBSKEY); // 入力 await postThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+ID, id: THID }); - return {'sc':true,'redirect':`/${base}/read.cgi/${BBSKEY}/${THID}`}; + return {'sc':true,'redirect':`/${BBSKEY}/${THID}`}; } return {sc:false,redirect:'/'} diff --git a/src/module/storage/beta-unstorage-json.ts b/src/module/storage/beta-unstorage-json.ts new file mode 100644 index 0000000..bc5ef11 --- /dev/null +++ b/src/module/storage/beta-unstorage-json.ts @@ -0,0 +1,61 @@ +import { createStorage } from "unstorage"; +import fsDriver from "unstorage/drivers/fs"; +import { config } from "../config"; +import { subjectpaser,datpaser } from "../pase"; +import { NewThreadParams,PostThreadParams, getSubjectReturn, getThreadReturn, postReturn } from "../storage"; + +const drives = {driver:config().preference.site.UnstorageOptions} || {driver:fsDriver({ base: "./data" })}; + +export async function addSubject_file(BBSKEY:string,date: string, title: string,id: string):Promise { + const storage = createStorage(drives); + const SUBJECT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); + await storage.setItem(`${BBSKEY}/SUBJECT.TXT`, `${id}.dat<>${title} (0)\n${SUBJECT}`); +} + +export async function DeleteOldSubject_file(BBSKEY:string,):Promise { + const storage = createStorage(drives); + const SUBJECT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); + const lines = String(SUBJECT).split('\n'); + const newLines = lines.slice(0, config()!.preference!.limit!.MaxSubject); // Keep the first 10 lines + const newSubject = newLines.join('\n'); + await storage.setItem(`${BBSKEY}/SUBJECT.TXT`, newSubject); +} +export async function getSubjecttxt_file(BBSKEY:string,):Promise { + const storage = createStorage(drives); + const SUBTXT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); + return String(SUBTXT); +} +export async function getSubject_file(BBSKEY:string,):Promise { + const storage = createStorage(drives); + const SUBTXT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); + const HASSUB = await storage.hasItem(`${BBSKEY}/SUBJECT.TXT`); + if (!HASSUB) { + return {'data':{'a':["a","a"]},'has':HASSUB}; + } + return {'data':subjectpaser(String(SUBTXT)),'has':HASSUB}; +} +export async function NewThread_file(BBSKEY:string,{ name, mail, message, date, title, id }: NewThreadParams):Promise { + const storage = createStorage(drives); + await storage.setItem(`${BBSKEY}/dat/${id}.dat`, `${name}<>${mail}<>${date}<>${message}<>${title}`); + await addSubject_file(BBSKEY,date, title,id); + return { 'sc': true, 'redirect': `${BBSKEY}/${id}` }; +} + +export async function postThread_file(BBSKEY:string,{ name, mail, message, date, id }: PostThreadParams):Promise { + const storage = createStorage(drives); + const THDATTXT = await storage.getItem(`${BBSKEY}/dat/${id}.dat`); + await storage.setItem(`${BBSKEY}/dat/${id}.dat`, `${THDATTXT}\n${name}<>${mail}<>${date}<>${message}`); + return {'sc':true,'redirect':`${BBSKEY}/${id}`}; +} + +export async function getThread_file(BBSKEY:string,id: string):Promise { + const storage = createStorage(drives); + const dat = await storage.getItem(`${BBSKEY}/dat/${id}.dat`); + const hasdat= await storage.hasItem(`${BBSKEY}/dat/${id}.dat`); + return {'data':JSON.parse(datpaser(String(dat))),has:hasdat}; +} +export async function getdat_file(BBSKEY:string,idextension: string):Promise { + const storage = createStorage(drives); + const dat = await storage.getItem(`${BBSKEY}/dat/${idextension}.dat`); + return String(dat) +} \ No newline at end of file diff --git a/src/module/storage/unstrage-base.ts b/src/module/storage/unstrage-base.ts index a3a81ad..bc5ef11 100644 --- a/src/module/storage/unstrage-base.ts +++ b/src/module/storage/unstrage-base.ts @@ -6,10 +6,6 @@ import { NewThreadParams,PostThreadParams, getSubjectReturn, getThreadReturn, po const drives = {driver:config().preference.site.UnstorageOptions} || {driver:fsDriver({ base: "./data" })}; -export function writedat(dat: string, datname: string) { - const storage = createStorage(drives); -} - export async function addSubject_file(BBSKEY:string,date: string, title: string,id: string):Promise { const storage = createStorage(drives); const SUBJECT = await storage.getItem(`${BBSKEY}/SUBJECT.TXT`); @@ -42,14 +38,14 @@ export async function NewThread_file(BBSKEY:string,{ name, mail, message, date, const storage = createStorage(drives); await storage.setItem(`${BBSKEY}/dat/${id}.dat`, `${name}<>${mail}<>${date}<>${message}<>${title}`); await addSubject_file(BBSKEY,date, title,id); - return { 'sc': true, 'redirect': `/${config().preference.site.InstDIR}/read.cgi/${BBSKEY}/${id}` }; + return { 'sc': true, 'redirect': `${BBSKEY}/${id}` }; } export async function postThread_file(BBSKEY:string,{ name, mail, message, date, id }: PostThreadParams):Promise { const storage = createStorage(drives); const THDATTXT = await storage.getItem(`${BBSKEY}/dat/${id}.dat`); await storage.setItem(`${BBSKEY}/dat/${id}.dat`, `${THDATTXT}\n${name}<>${mail}<>${date}<>${message}`); - return {'sc':true,'redirect':`/${config().preference.site.InstDIR}/read.cgi/${BBSKEY}/${id}`}; + return {'sc':true,'redirect':`${BBSKEY}/${id}`}; } export async function getThread_file(BBSKEY:string,id: string):Promise { diff --git a/src/server.ts b/src/server.ts index ad6b141..982a68c 100644 --- a/src/server.ts +++ b/src/server.ts @@ -24,10 +24,10 @@ export const customLogger = (message: string, ...rest: string[]) => { app.use(logger(customLogger)) // app.use(compress()) -app.use(cors()) -app.use(csrf()) +// app.use(cors()) +// app.use(csrf()) app.use(etag()) -app.use(secureHeaders()) +// app.use(secureHeaders()) app.route("/api",API) app.route("/", BBS); From 6a3140a95c4edbbe18eba1fa7ff9f02404611359 Mon Sep 17 00:00:00 2001 From: taisan <131413638+taisan11@users.noreply.github.com> Date: Mon, 24 Jun 2024 19:21:15 +0900 Subject: [PATCH 09/12] update --- src/UI.tsx | 15 +------------ src/oldui.tsx | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/server.ts | 2 ++ 3 files changed, 61 insertions(+), 14 deletions(-) create mode 100644 src/oldui.tsx diff --git a/src/UI.tsx b/src/UI.tsx index 8e9ffc9..ce4e136 100644 --- a/src/UI.tsx +++ b/src/UI.tsx @@ -3,6 +3,7 @@ import { jsxRenderer } from "hono/jsx-renderer"; import { getSubject, getSubjecttxt, getThread, getdat } from "./module/storage"; import { kakiko } from "./module/kakiko"; import { config } from "./module/config"; +import { hc } from "hono/client"; declare module "hono" { interface ContextRenderer { @@ -10,7 +11,6 @@ declare module "hono" { } } - const app = new Hono() app.get( @@ -183,17 +183,4 @@ app.get(`/:BBSKEY/:THID`, async (c) => { ); }); -app.get('/:BBSKEY/subject.txt', async (c) => { - const BBSKEY = c.req.param("BBSKEY"); - c.header("Content-Type", "text/plain; charset=Shift_JIS"); - return c.body(await getSubjecttxt(BBSKEY)) -}) -app.get('/:BBSKEY/dat/:THIDextension', async (c) => { - const BBSKEY = c.req.param("BBSKEY"); - const THIDextension = c.req.param("THIDextension"); - const dat = await getdat(BBSKEY,THIDextension) - c.header("Content-Type", "text/plain; charset=Shift_JIS"); - return c.body(dat) -}) - export default app; diff --git a/src/oldui.tsx b/src/oldui.tsx new file mode 100644 index 0000000..aac35d7 --- /dev/null +++ b/src/oldui.tsx @@ -0,0 +1,58 @@ +import { Hono } from "hono"; +import { jsxRenderer } from "hono/jsx-renderer"; +import { getSubject, getSubjecttxt, getThread, getdat } from "./module/storage"; +import { kakiko } from "./module/kakiko"; +import { config } from "./module/config"; + +declare module "hono" { + interface ContextRenderer { + (content: string | Promise, props: { title?: string }): Response; + } +} + + +const app = new Hono() + +app.get( + "*", + jsxRenderer(({ children, title }) => { + return ( + + + + + {title} + + {children} + + ); + }), +); + +app.get("/bbsmenu.html", async (c) => { + return c.render( +
+ aaa +
+ テスト +
+
,{title: "掲示板メニュー"} + ); +}) +app.get('/:BBSKEY/subject.txt', async (c) => { + const BBSKEY = c.req.param("BBSKEY"); + c.header("Content-Type", "text/plain; charset=Shift_JIS"); + return c.body(await getSubjecttxt(BBSKEY)) +}) +app.get('/:BBSKEY/dat/:THIDextension', async (c) => { + const BBSKEY = c.req.param("BBSKEY"); + const THIDextension = c.req.param("THIDextension"); + const dat = await getdat(BBSKEY,THIDextension) + c.header("Content-Type", "text/plain; charset=Shift_JIS"); + return c.body(dat) +}) + +export default app; diff --git a/src/server.ts b/src/server.ts index 982a68c..645c5b3 100644 --- a/src/server.ts +++ b/src/server.ts @@ -10,6 +10,7 @@ import { etag } from 'hono/etag' import { secureHeaders } from 'hono/secure-headers' import BBS from './UI' import API from './api' +import OldUI from './oldui' type Bindings = { ip: SocketAddress @@ -29,6 +30,7 @@ app.use(logger(customLogger)) app.use(etag()) // app.use(secureHeaders()) +app.route("/", OldUI); app.route("/api",API) app.route("/", BBS); From f84dfde0be0363bab9aa85ad8cbb743724d1c648 Mon Sep 17 00:00:00 2001 From: taisan11 <131413638+taisan11@users.noreply.github.com> Date: Tue, 25 Jun 2024 09:49:46 +0900 Subject: [PATCH 10/12] dep update --- bun.lockb | Bin 74778 -> 74778 bytes package.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bun.lockb b/bun.lockb index b460bfb18447ea4a4298b3290e242ca5e5d080d2..6641d954665c2901e4bf74754f88c7e00d0d2fa3 100755 GIT binary patch delta 145 zcmV;C0B--9$OM|m1duKuvr6u2H-~ros9_!mb{y_YAH13!Zw9scgQ Date: Tue, 25 Jun 2024 13:46:23 +0900 Subject: [PATCH 11/12] =?UTF-8?q?=E6=95=B4=E7=90=86=20kakiko-api=E3=81=AB?= =?UTF-8?q?=E4=B8=80=E6=9C=AC=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script/id_test.ts | 3 ++ src/UI.tsx | 24 ++++++++++---- src/module/KAS.ts | 4 +-- src/module/angou.ts | 20 ------------ src/module/env.ts | 25 --------------- src/module/id.ts | 69 ++++++++++++++++++++++++++++++++++++++-- src/module/kakiko-api.ts | 4 +-- src/module/kakiko.ts | 61 ----------------------------------- src/module/logger.ts | 7 ++++ 9 files changed, 98 insertions(+), 119 deletions(-) create mode 100644 script/id_test.ts delete mode 100644 src/module/angou.ts delete mode 100644 src/module/env.ts delete mode 100644 src/module/kakiko.ts create mode 100644 src/module/logger.ts diff --git a/script/id_test.ts b/script/id_test.ts new file mode 100644 index 0000000..90f975a --- /dev/null +++ b/script/id_test.ts @@ -0,0 +1,3 @@ +import { id } from "../src/module/id"; +//@ts-ignore +console.log(await id("1.1.1.2","test")) \ No newline at end of file diff --git a/src/UI.tsx b/src/UI.tsx index ce4e136..7f7bf35 100644 --- a/src/UI.tsx +++ b/src/UI.tsx @@ -1,9 +1,9 @@ import { Hono } from "hono"; import { jsxRenderer } from "hono/jsx-renderer"; import { getSubject, getSubjecttxt, getThread, getdat } from "./module/storage"; -import { kakiko } from "./module/kakiko"; import { config } from "./module/config"; import { hc } from "hono/client"; +import { kakikoAPI } from "./module/kakiko-api"; declare module "hono" { interface ContextRenderer { @@ -113,13 +113,25 @@ app.get(`/:BBSKEY`, async (c) => { //////////////////////// // 書き込み app.post(`/:BBSKEY/:THID`, async (c) => { - const kextuka = await kakiko(c,'kakiko'); - return c.redirect(kextuka.redirect); + const body = await c.req.parseBody() + const Name = String(body.name);//名前 + const mail = String(body.mail);//メアドor色々 + const MESSAGE = String(body.MESSAGE);//内容 + const BBSKEY = c.req.param("BBSKEY");//BBSKEY + const THID = c.req.param("THID");//スレID + const kextuka = await kakikoAPI({ThID:THID,name:Name,mail,MESSAGE,BBSKEY},c,"kakiko") + return c.redirect(kextuka.ThID); }); // Newスレッド app.post(`/:BBSKEY`, async (c) => { - const kextuka = await kakiko(c, "newth"); - return c.redirect(kextuka.redirect); + const body = await c.req.parseBody() + const ThTi = String(body.ThTitle) + const Name = String(body.name);//名前 + const mail = String(body.mail);//メアドor色々 + const MESSAGE = String(body.MESSAGE);//内容 + const BBSKEY = c.req.param("BBSKEY");//BBSKEY + const kextuka = await kakikoAPI({ThTitle:ThTi,name:Name,mail,MESSAGE,BBSKEY},c,"newth") + return c.redirect(kextuka.ThID); }); app.get(`/:BBSKEY/:THID`, async (c) => { @@ -183,4 +195,4 @@ app.get(`/:BBSKEY/:THID`, async (c) => { ); }); -export default app; +export default app; \ No newline at end of file diff --git a/src/module/KAS.ts b/src/module/KAS.ts index 06f4dee..94d6051 100644 --- a/src/module/KAS.ts +++ b/src/module/KAS.ts @@ -18,7 +18,7 @@ function formatUnixTime(unixTime: number): string { } export async function KAS(mes:string,name:string,mail:string,time:number){ - const kkk = NewMES(mes) + const kkk = MES(mes) const lll = await NES(name,mail) const ttt = formatUnixTime(time) return { @@ -29,7 +29,7 @@ export async function KAS(mes:string,name:string,mail:string,time:number){ } } -function NewMES(input: string | null): string { +function MES(input: string | null): string { if (!input) return ''; // HTML特殊文字を変換 diff --git a/src/module/angou.ts b/src/module/angou.ts deleted file mode 100644 index cf7e543..0000000 --- a/src/module/angou.ts +++ /dev/null @@ -1,20 +0,0 @@ -export async function SHA512(message:string,salt?:string,Pepper?:string):Promise { - message = message+salt+Pepper; - const msgUint8 = new TextEncoder().encode(message); // (utf-8 の) Uint8Array にエンコードする - const hashBuffer = await crypto.subtle.digest("SHA-512", msgUint8); // メッセージをハッシュする - const hashArray = Array.from(new Uint8Array(hashBuffer)); // バッファーをバイト列に変換する - const hashHex = hashArray - .map((b) => b.toString(16).padStart(2, "0")) - .join(""); // バイト列を 16 進文字列に変換する - return hashHex; -} -export async function SHA256(message:string,salt?:string,Pepper?:string):Promise { - message = message+salt+Pepper; - const msgUint8 = new TextEncoder().encode(message); // (utf-8 の) Uint8Array にエンコードする - const hashBuffer = await crypto.subtle.digest("SHA-256", msgUint8); // メッセージをハッシュする - const hashArray = Array.from(new Uint8Array(hashBuffer)); // バッファーをバイト列に変換する - const hashHex = hashArray - .map((b) => b.toString(16).padStart(2, "0")) - .join(""); // バイト列を 16 進文字列に変換する - return hashHex; -} \ No newline at end of file diff --git a/src/module/env.ts b/src/module/env.ts deleted file mode 100644 index 592dcfe..0000000 --- a/src/module/env.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { Context } from 'hono' -import { getRuntimeKey } from 'hono/adapter' -import { getConnInfo as getConnInfoBun } from 'hono/bun' -import { getConnInfo as getConnInfoCF } from 'hono/cloudflare-workers' -import type { ConnInfo } from 'hono/conninfo' -import { getConnInfo as getConnInfoDeno } from 'hono/deno' - -export function getConnInfo(c:Context):ConnInfo|void { - if (getRuntimeKey() === "bun") { - return getConnInfoBun(c) - } else if (getRuntimeKey() === "deno") { - return getConnInfoDeno(c) - } else if (getRuntimeKey() === "edge-light") { - return - } else if (getRuntimeKey() === "fastly") { - return - } else if (getRuntimeKey() === "node") { - return - } else if (getRuntimeKey() === "workerd") { - return getConnInfoCF(c) - } else if (getRuntimeKey() === "other") { - return - } - return -} diff --git a/src/module/id.ts b/src/module/id.ts index fc7d84a..0050f37 100644 --- a/src/module/id.ts +++ b/src/module/id.ts @@ -1,5 +1,3 @@ -import { SHA512 } from "./angou"; - // idは9文字 export async function id(ip: string,itaID: string): Promise { const date = new Date(); @@ -9,4 +7,69 @@ export async function id(ip: string,itaID: string): Promise { const formattedDate = `${year}${month}${day}`; const hash = await SHA512(ip + itaID + formattedDate); return hash.slice(0, 9); -} \ No newline at end of file +} + +///////////////// +// サブ関数 +///////////////// +//SHA512関数 +async function SHA512(message:string,salt?:string,Pepper?:string):Promise { + message = message+salt+Pepper; + const msgUint8 = new TextEncoder().encode(message); // (utf-8 の) Uint8Array にエンコードする + const hashBuffer = await crypto.subtle.digest("SHA-512", msgUint8); // メッセージをハッシュする + const hashArray = Array.from(new Uint8Array(hashBuffer)); // バッファーをバイト列に変換する + const hashHex = hashArray + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); // バイト列を 16 進文字列に変換する + return hashHex; +} +// 匿名IP判定 +function isAnonymous(isFwifi: boolean, country: string, remoho: string, ipAddr: string): boolean { + let isAnon = false; + + if (!isFwifi && country === 'JP' && remoho !== ipAddr) { + const anonRemohoPatterns = [ + /^.*\.(vpngate\.v4\.open\.ad\.jp|opengw\.net)$/, + /(vpn|tor|proxy|onion)/, + /^.*\.(ablenetvps\.ne\.jp|amazonaws\.com|arena\.ne\.jp|akamaitechnologies\.com|cdn77\.com|cnode\.io|datapacket\.com|digita-vm\.com|googleusercontent\.com|hmk-temp\.com|kagoya\.net|linodeusercontent\.com|sakura\.ne\.jp|vultrusercontent\.com|xtom\.com)$/, + /^.*\.(tsc-soft\.com|53ja\.net)$/ + ]; + + for (const pattern of anonRemohoPatterns) { + if (pattern.test(remoho)) { + isAnon = true; + break; + } + } + } + + return isAnon; +} +//公衆Wifi判定 +function isPublicWifi(country: string, ipAddr: string, remoho: string): string { + let isFwifi = ''; + + if (country === 'JP' && remoho !== ipAddr) { + const fwifiRemoho = [ + '.*\\.m-zone\\.jp', + '\\d+\\.wi-fi\\.kddi\\.com', + '.*\\.wi-fi\\.wi2\\.ne\\.jp', + '.*\\.ec-userreverse\\.dion\\.ne\\.jp', + '210\\.227\\.19\\.[67]\\d', + '222-229-49-202.saitama.fdn.vectant.ne.jp' + ]; + const fwifiNicknames = ['mz', 'auw', 'wi2', 'dion', 'lson', 'vectant']; + + for (let i = 0; i < fwifiRemoho.length; i++) { + const name = fwifiRemoho[i]; + const regex = new RegExp(`^${name}$`); + if (regex.test(remoho)) { + isFwifi = fwifiNicknames[i]; + break; + } + } + } + + return isFwifi; + } + \ No newline at end of file diff --git a/src/module/kakiko-api.ts b/src/module/kakiko-api.ts index 690a61b..65831f6 100644 --- a/src/module/kakiko-api.ts +++ b/src/module/kakiko-api.ts @@ -12,7 +12,7 @@ export async function kakikoAPI({ThTitle,name,mail,MESSAGE,BBSKEY,ThID}:{ThTitle const body = await c.req.parseBody() if (mode === 'newth') { const date = new Date();//時間 - const ip = c.req.header('CF-Connecting-IP')//IP(cloudflare tunnel使えば行けるやろ) + const IP = c.req.header('CF-Connecting-IP')||c.env.ip.address||'0.0.0.0' const UnixTime = String(date.getTime()).substring(0, 10)//UnixTime // 文字数制限など if (name.length > 30) { return { 'sc': false, 'ThID': `error0` } } @@ -31,7 +31,7 @@ export async function kakikoAPI({ThTitle,name,mail,MESSAGE,BBSKEY,ThID}:{ThTitle // 内容物の取得 const date = new Date();//時間 const UnixTime = String(date.getTime()).substring(0, 10)//UnixTime - const IP = c.req.header('CF-Connecting-IP')||c.env.ip.address||'0.0.0.0'//IP(cloudflare tunnel使えば行けるやろ) + const IP = c.req.header('CF-Connecting-IP')||c.env.ip.address||'0.0.0.0' // 変換 const KASS = await KAS(MESSAGE,name,mail,Number(UnixTime)); // 制限 diff --git a/src/module/kakiko.ts b/src/module/kakiko.ts deleted file mode 100644 index 3575382..0000000 --- a/src/module/kakiko.ts +++ /dev/null @@ -1,61 +0,0 @@ -import type { Context } from "hono"; -import { getThread,postThread,NewThread,getSubject,DeleteOldSubject,addSubject } from "./storage"; -import { KAS } from "./KAS"; -import { id } from "./id"; - -/** - * @param c Hono Context - * @param mode 新しいスレッドを立てるか、レスを書き込むか - * @returns {sc:'ok'|false,redirect:string} 成功したか、リダイレクト先 - */ -export async function kakiko(c: Context, mode: 'newth' | 'kakiko'): Promise<{ sc: boolean, redirect: string }> { - const body = await c.req.parseBody() - if (mode === 'newth') { - // 内容物の取得 - const ThTi = String(body.ThTitle) - const Name = String(body.name);//名前 - const mail = String(body.mail);//メアドor色々 - const MESSAGE = String(body.MESSAGE);//内容 - const BBSKEY = c.req.param("BBSKEY");//BBSKEY - const date = new Date();//時間 - const ip = c.req.header('CF-Connecting-IP')//IP(cloudflare tunnel使えば行けるやろ) - const UnixTime = String(date.getTime()).substring(0, 10)//UnixTime - // 文字数制限など - if (Name.length > 30) { return { 'sc': false, 'redirect': `/error?e=0` } } - if (!MESSAGE || MESSAGE.length > 300) { return { 'sc': false, 'redirect': `/error?e=1` } } - if (mail.length > 70) { return { 'sc': false, 'redirect': `/error?e=2` } } - if (!BBSKEY) { return { 'sc': false, 'redirect': `/error?e=3` } } - if (!ThTi) { return { 'sc': false, 'redirect': `/error?e=5` } } - // 加工 - const KASS = await KAS(MESSAGE, Name, mail, Number(UnixTime)); - // 保存 - await NewThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+'testtests', title: ThTi, id: UnixTime }); - // 返す - return { 'sc': true, 'redirect': `/${BBSKEY}/${UnixTime}` }; - } - if (mode === 'kakiko') { - // 内容物の取得 - const Name = String(body.name);//名前 - const mail = String(body.mail);//メアドor色々 - const MESSAGE = String(body.MESSAGE);//内容 - const BBSKEY = c.req.param("BBSKEY");//BBSKEY - const THID = c.req.param("THID");//スレID - const date = new Date();//時間 - const UnixTime = String(date.getTime()).substring(0, 10)//UnixTime - const IP = c.req.header('CF-Connecting-IP')||c.env.ip.address||'0.0.0.0'//IP(cloudflare tunnel使えば行けるやろ) - // 変換 - const KASS = await KAS(MESSAGE,Name,mail,Number(UnixTime)); - // 制限 - if (Name.length > 30) { return {'sc':false,'redirect':`/error?e=0`} } - if (!MESSAGE || MESSAGE.length > 300) { return {'sc':false,'redirect':`/error?e=1`} } - if (mail.length > 70) { return {'sc':false,'redirect':`/error?e=2`} } - if (!BBSKEY) { return {'sc':false,'redirect':`/error?e=3`} } - if (!THID) { return {'sc':false,'redirect':`/error?e=4`} } - const ID = await id(IP,BBSKEY); - // 入力 - await postThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+ID, id: THID }); - return {'sc':true,'redirect':`/${BBSKEY}/${THID}`}; - - } - return {sc:false,redirect:'/'} -} \ No newline at end of file diff --git a/src/module/logger.ts b/src/module/logger.ts new file mode 100644 index 0000000..4aabe73 --- /dev/null +++ b/src/module/logger.ts @@ -0,0 +1,7 @@ +import { createMiddleware } from 'hono/factory' + +const logger = createMiddleware(async (c, next) => { + console.log(`[${c.req.method}] ${c.req.url} IP:${c.env.ip}`) + + await next() +}) \ No newline at end of file From 8787e1f0377ef4ca7cb0670fb532f5f6e037c5b1 Mon Sep 17 00:00:00 2001 From: taisan11 <131413638+taisan11@users.noreply.github.com> Date: Tue, 25 Jun 2024 14:05:35 +0900 Subject: [PATCH 12/12] =?UTF-8?q?=E5=AE=8C=E7=92=A7!!?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/UI.tsx | 2 -- src/module/config.ts | 2 +- src/module/kakiko-api.ts | 4 ++-- src/module/trip.ts | 4 ++-- src/server.ts | 4 ++-- src/types.ts | 2 +- 6 files changed, 8 insertions(+), 10 deletions(-) diff --git a/src/UI.tsx b/src/UI.tsx index 7f7bf35..6beef19 100644 --- a/src/UI.tsx +++ b/src/UI.tsx @@ -1,8 +1,6 @@ import { Hono } from "hono"; import { jsxRenderer } from "hono/jsx-renderer"; import { getSubject, getSubjecttxt, getThread, getdat } from "./module/storage"; -import { config } from "./module/config"; -import { hc } from "hono/client"; import { kakikoAPI } from "./module/kakiko-api"; declare module "hono" { diff --git a/src/module/config.ts b/src/module/config.ts index a4684f2..27ea422 100644 --- a/src/module/config.ts +++ b/src/module/config.ts @@ -1,4 +1,4 @@ -import fsDriver, { FSStorageOptions } from "unstorage/drivers/fs" +import fsDriver from "unstorage/drivers/fs" export type Config = { caps?: { diff --git a/src/module/kakiko-api.ts b/src/module/kakiko-api.ts index 65831f6..b205f8d 100644 --- a/src/module/kakiko-api.ts +++ b/src/module/kakiko-api.ts @@ -25,7 +25,7 @@ export async function kakikoAPI({ThTitle,name,mail,MESSAGE,BBSKEY,ThID}:{ThTitle // 保存 await NewThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+'testtests', title: ThTitle, id: UnixTime }); // 返す - return { 'sc': true, 'ThID': `${BBSKEY}/${UnixTime}` }; + return { 'sc': true, 'ThID': `/${BBSKEY}/${UnixTime}` }; } if (mode === 'kakiko') { // 内容物の取得 @@ -43,7 +43,7 @@ export async function kakikoAPI({ThTitle,name,mail,MESSAGE,BBSKEY,ThID}:{ThTitle const ID = await id(IP,BBSKEY); // 入力 await postThread(BBSKEY,{ name: KASS.name, mail: KASS.mail, message: KASS.mes, date: KASS.time+' ID:'+ID, id: ThID }); - return {'sc':true,'ThID':`${BBSKEY}/${ThID}`}; + return {'sc':true,'ThID':`/${BBSKEY}/${ThID}`}; } return {sc:false,ThID:'error999999999'} diff --git a/src/module/trip.ts b/src/module/trip.ts index b846b06..e7c43b0 100644 --- a/src/module/trip.ts +++ b/src/module/trip.ts @@ -1,4 +1,4 @@ -import * as IconvCP932 from "iconv-cp932"; +import {encode} from "iconv-cp932"; import { create10DigitsTrip, create12DigitsTrip, createRawKeyTrip } from './trip/index' @@ -12,7 +12,7 @@ const maskSpecialSymbols = (text: string) => text.replace(/★/g, '☆').replace export const createTripByKey = (key: string) => { // const encodedKeyString = convert(key, { from: 'UNICODE', to: 'SJIS', fallback: 'html-entity' }) - const encodedKeyString = IconvCP932.encode(key).toString() + const encodedKeyString = encode(key).toString() // 10 桁トリップ if (encodedKeyString.length < 12) return create10DigitsTrip(key) diff --git a/src/server.ts b/src/server.ts index 645c5b3..2b3e743 100644 --- a/src/server.ts +++ b/src/server.ts @@ -25,10 +25,10 @@ export const customLogger = (message: string, ...rest: string[]) => { app.use(logger(customLogger)) // app.use(compress()) -// app.use(cors()) +app.use(cors()) // app.use(csrf()) app.use(etag()) -// app.use(secureHeaders()) +app.use(secureHeaders()) app.route("/", OldUI); app.route("/api",API) diff --git a/src/types.ts b/src/types.ts index 4d286a7..b958384 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,4 +1,4 @@ -import {object,string,number,pipe,array,date,trim,endsWith} from 'valibot' +import {object,string,number} from 'valibot' const v = {object,string,number}