{/* パンくず */}
- navigate("/")}>Home / Document
+ {slug ? (
+ <>
+ navigate("/my-docs")} style={{cursor:"pointer"}}>My Docs
+ / {slug}
+ >
+ ) : (
+ <>
+ New Document
+ >
+ )}
- {isEditable ? (
- <>
-
- setContent(text)}
- renderHTML={(text) => {text}}
- config={{
- view: { menu: true, md: true, html: true },
- canView: { fullScreen: true, hideMenu: false },
- }}
- />
-
+
+ setContent(text)}
+ // ★ DOMPurifyをかませる例 (最低限)
+ renderHTML={(text) => (
+ {DOMPurify.sanitize(text)}
+ )}
+ config={{
+ view: { menu: true, md: true, html: true },
+ canView: { fullScreen: true, hideMenu: false },
+ }}
+ />
+
- {/* 公開チェックボックス */}
+ {/* ボタン類 */}
+ {(isEditable || isSignedIn) ? (
+ <>
- {/* ボタン行 */}
-
- {/* 公開URL/共有ブロック */}
+ {/* 公開URL(既存ドキュメント+公開の場合に表示) */}
{isPublic && slug && (
公開URL:
{`${window.location.origin}/documents/${slug}`}
-
{
const url = `${window.location.origin}/documents/${slug}`;
- navigator.clipboard.writeText(url).then();
+ navigator.clipboard.writeText(url).then(r => r);
alert("公開URLをコピーしました!\n" + url);
}}
>
@@ -146,7 +205,7 @@ const DocPage: React.FC = () => {
公開ページを開く
@@ -154,7 +213,10 @@ const DocPage: React.FC = () => {
)}
>
) : (
- 編集権限はありません。
+ <>
+ ドキュメントの保存はログインユーザーのみ可能です。
+ ログインせずに入力した内容は保持されませんので、ご注意ください
+ >
)}
);
diff --git a/frontend/src/pages/DocsListPage.tsx b/frontend/src/pages/DocsListPage.tsx
index a7ef34c..de3572b 100644
--- a/frontend/src/pages/DocsListPage.tsx
+++ b/frontend/src/pages/DocsListPage.tsx
@@ -2,12 +2,11 @@
import React, { useEffect, useState } from "react";
import { Link } from "react-router-dom";
import { useApiClient } from "../services/apiClient";
-import { useAuthContextSwitch as useAuthContext} from "../context/useAuthContextSwitch.ts";
+import { useAuthContextSwitch as useAuthContext} from "../context/useAuthContextSwitch";
import { AxiosError } from "axios";
import styles from "../styles/DocsListPage.module.scss";
-
const extractTitle = (markdown: string): string => {
const lines = markdown.split("\n");
for (const line of lines) {
@@ -49,10 +48,10 @@ const DocsListPage: React.FC = () => {
}
}
};
- if (isSignedIn){
+ if (isSignedIn) {
fetchDocs();
}
- }, [api, user]);
+ }, [api, user, isSignedIn]);
if (error) {
return
{error}
;
@@ -70,8 +69,9 @@ const DocsListPage: React.FC = () => {
{isSignedIn ? (
<>
+ {/* 新規ドキュメントは "/" に */}
{
const title = extractTitle(doc.content);
const isPublic = doc.isPublic;
return (
-
+
{/* タイトル */}
|
{title}
@@ -129,11 +126,11 @@ const DocsListPage: React.FC = () => {
{/* 共有ボタン(公開時のみ) */}
|
{isPublic ? (
- handleShare(doc.slug)}>共有
+ handleShare(doc.slug)}>
+ 共有
+
) : (
-
- -
-
+ -
)}
|
diff --git a/frontend/src/pages/PublicDocumentPage.tsx b/frontend/src/pages/PublicDocumentPage.tsx
index cd0f812..0890c61 100644
--- a/frontend/src/pages/PublicDocumentPage.tsx
+++ b/frontend/src/pages/PublicDocumentPage.tsx
@@ -1,15 +1,16 @@
+// PublicDocumentPage.tsx
import React, { useEffect, useState } from "react";
import { useParams, Link } from "react-router-dom";
-import { useAuthContextSwitch as useAuthContext} from "../context/useAuthContextSwitch.ts";
import { useApiClient } from "../services/apiClient";
import styles from "../styles/DocPage.module.scss";
import MdEditor from "react-markdown-editor-lite";
import "react-markdown-editor-lite/lib/index.css";
import ReactMarkdown from "react-markdown";
+// ★ 追加
+import DOMPurify from "dompurify";
const PublicDocumentPage: React.FC = () => {
- const { user } = useAuthContext();
const { slug } = useParams<{ slug: string }>();
const [content, setContent] = useState
("");
const [error, setError] = useState(null);
@@ -27,8 +28,8 @@ const PublicDocumentPage: React.FC = () => {
}
}
};
- fetchDocument().then();
- }, [slug, user, api, content]);
+ fetchDocument();
+ }, [slug, api]);
if (error) {
return (
@@ -48,8 +49,7 @@ const PublicDocumentPage: React.FC = () => {
return (
- {/* タイトルや説明 */}
-
+
※こちらのドキュメントは公開設定になっているため、URLを知っていれば誰でも閲覧可能です。
@@ -58,18 +58,21 @@ const PublicDocumentPage: React.FC = () => {
setContent(text)}
- renderHTML={(text) => {text}}
+ // ★ sanitize (最低限)
+ renderHTML={(text) => (
+ {DOMPurify.sanitize(text)}
+ )}
config={{
- view: {menu: false, md: false, html: true},
- canView: {fullScreen: true, hideMenu: true},
+ view: { menu: false, md: false, html: true },
+ canView: { fullScreen: true, hideMenu: true },
}}
/>
-
-
- ← Home
+
+
+
+ ← My Docs
diff --git a/frontend/src/pages/TermsOfUsePage.tsx b/frontend/src/pages/TermsOfUsePage.tsx
index e92de65..962b7b0 100644
--- a/frontend/src/pages/TermsOfUsePage.tsx
+++ b/frontend/src/pages/TermsOfUsePage.tsx
@@ -19,6 +19,19 @@ const TermsOfUsePage: React.FC = () => {
ユーザーは、本サービスを利用することで、本規約に同意したものとみなされます。
ユーザーは本規約を確認・承諾のうえご利用ください。
+
+ 本サービスは
+
+ オープンソースプロジェクト(ソースコード公開先)
+
+ を元に構築されたサンプル・デモ的アプリケーションです。
+ 脆弱性が発見された場合も、開発者・運営者は責任を負いません。
+ ご自身の責任においてご利用ください。
+
2. 禁止事項
@@ -26,30 +39,66 @@ const TermsOfUsePage: React.FC = () => {
- 違法行為または公序良俗に反する行為
- 本サービスの運営を妨げる行為
{/* 必要に応じて追加 */}
+ -
+ 本サービスを利用して公開または保存するコンテンツが
+ 不適切・不道徳と運営者が判断した場合、事前通知なしで
+ データの削除やユーザーアカウントの削除を行う場合があります。
+
3. 免責事項
- 本サービスの提供者は、サービス内容やユーザー投稿コンテンツ等に関して、いかなる
- 保証も行いません。サービス利用に起因する損害について、一切の責任を負わない
- ものとします。
+ 本サービスの提供者は、サービス内容やユーザー投稿コンテンツ等に関して、
+ いかなる保証も行いません。サービス利用に起因する損害、あるいは
+ 本サービスの脆弱性・不具合によって生じたトラブル等に関しましても、
+ 一切の責任を負わないものとします。
+
+
+ また、本サービスはサンプル用途・試用目的で提供されており、機密情報や
+ 個人情報などは保存しないようご注意ください。本サービスに保存された
+ データの漏洩・改ざん・削除等について、運営者は一切責任を負いません。
+
+
+ 不適切な内容を保存・公開していると運営者が判断した場合、ユーザーへの
+ 通知なくしてデータやアカウントを削除する場合があります。
+ その結果生じる損害や不利益に対して、運営者は責任を一切負いません。
+ 不適切か否かの判断は運営者の独断により行われるものとします。
-
4. 規約の変更
+
4. コードの公開と免責
- 本規約は、事前の通知なく変更される場合があります。変更後の規約は、本サービス
- 内で掲載された時点から効力を有します。
+ 本サービスのソースコードは
+
+ GitHubリポジトリ
+
+ にて公開されています。ご自身の環境で導入・カスタマイズを行う場合も
+ 自己責任でお願いします。利用による損害や不具合等に対し、運営者は
+ いかなる補償も行いません。
+
+
+ 改変や提案(Contribute)を行っていただくことは歓迎ですが、
+ その結果生じる問題や損害に関して運営者は一切の責任を負いません。
+
+
+
5. 規約の変更
+
+ 本規約は、事前の通知なく変更される場合があります。変更後の規約は、
+ 本サービス内で掲載された時点から効力を有します。
-
5. 準拠法および管轄裁判所
+
6. 準拠法および管轄裁判所
- 本規約の解釈や適用は日本法に準拠し、本サービスまたは本規約に関連して紛争が
- 生じた場合、開発者または管理者の所在地を管轄する裁判所を専属的合意管轄裁判所
- とします。
+ 本規約の解釈や適用は日本法に準拠し、本サービスまたは本規約に関連して
+ 紛争が生じた場合、開発者または管理者の所在地を管轄する裁判所を
+ 専属的合意管轄裁判所とします。
- {/* ▼ 更新履歴セクションを追加 ▼ */}
-
6. 更新履歴
+ {/* ▼ 更新履歴セクション(例)▼ */}
+
7. 更新履歴
@@ -64,6 +113,13 @@ const TermsOfUsePage: React.FC = () => {
| 2025-01-12 |
初版を作成 |
+
+ | 1.1.0 |
+ 2025-01-16 |
+
+ オープンソース公開情報や不適切コンテンツの削除対応などに関する追記
+ |
+
{/* 必要に応じて追加 */}