@@ -143,25 +148,25 @@ export default function File({ passwordParent }: Props) {
export async function getServerSideProps(context: GetServerSidePropsContext) {
const { id } = context.query;
- const passwordParent = await axios.get(
- `http://localhost:5000/api/files/${id}`,
- );
+ const data = await axios.get(`http://localhost:5000/api/files/${id}`);
context.res.setHeader(
"Cache-Control",
"public, s-maxage=10, stale-while-revalidate=59",
);
- if (passwordParent) {
+ if (data) {
return {
props: {
- passwordParent: passwordParent.data.protectedId || null,
+ passwordParent: data.data.protectedId || null,
+ fileName: data.data.file.name,
},
};
} else {
return {
props: {
passwordParent: "",
+ fileName: "",
},
};
}
diff --git a/src/pages/folder/[id].tsx b/src/pages/folder/[id].tsx
index 3345737..91f8336 100644
--- a/src/pages/folder/[id].tsx
+++ b/src/pages/folder/[id].tsx
@@ -1,16 +1,10 @@
-import useSWR, { mutate } from "swr";
+import useSWR from "swr";
import useSWRInfinite from "swr/infinite";
import fetcher, { buildNextKey } from "@utils/swrFetch";
import { ErrorResponse, FilesResponse, TFile } from "@/types/googleapis";
import Breadcrumb from "@/components/Breadcrumb";
import { drive_v3 } from "googleapis";
-import {
- Dispatch,
- SetStateAction,
- useCallback,
- useEffect,
- useState,
-} from "react";
+import { useCallback, useEffect, useState } from "react";
import MarkdownRender from "@/components/utility/MarkdownRender";
import config from "@config/site.config";
import GridLayout from "@components/layout/Files/GridLayout";
@@ -23,11 +17,13 @@ import { useRouter } from "next/router";
import axios from "axios";
import Password from "@components/layout/Password";
import { GetServerSidePropsContext } from "next";
+import { NextSeo } from "next-seo";
type Props = {
passwordParent?: string;
+ folderName?: string;
};
-export default function Folder({ passwordParent }: Props) {
+export default function Folder({ passwordParent, folderName }: Props) {
const router = useRouter();
const { id } = router.query;
@@ -150,6 +146,8 @@ export default function Folder({ passwordParent }: Props) {
return (
+
+
:first-child {
- margin-top: 0 !important;
-}
-
-.markdown-body > :last-child {
- margin-bottom: 0 !important;
-}
-
-.markdown-body a:not([href]) {
- color: inherit;
- text-decoration: none;
-}
-
-.markdown-body blockquote,
-.markdown-body details,
-.markdown-body dl,
-.markdown-body ol,
-.markdown-body p,
-.markdown-body pre,
-.markdown-body table,
-.markdown-body ul {
- margin-top: 0;
- margin-bottom: 16px;
-}
-
-.markdown-body hr {
- height: 0.25em;
- padding: 0;
- margin: 24px 0;
- background-color: #e1e4e8;
- border: 0;
-}
-
-.markdown-body blockquote {
- padding: 0 1em;
- color: #6a737d;
- border-left: 0.25em solid #dfe2e5;
-}
-
-.markdown-body blockquote > :first-child {
- margin-top: 0;
-}
-
-.markdown-body blockquote > :last-child {
- margin-bottom: 0;
-}
-
-.markdown-body h1,
-.markdown-body h2,
-.markdown-body h3,
-.markdown-body h4,
-.markdown-body h5,
-.markdown-body h6 {
- margin-top: 24px;
- margin-bottom: 16px;
- font-weight: 600;
- line-height: 1.25;
-}
-
-.markdown-body h1 {
- font-size: 2em;
-}
-
-.markdown-body h1,
-.markdown-body h2 {
- padding-bottom: 0.3em;
- border-bottom: 1px solid #eaecef;
-}
-
-.markdown-body h2 {
- font-size: 1.5em;
-}
-
-.markdown-body h3 {
- font-size: 1.25em;
-}
-
-.markdown-body h4 {
- font-size: 1em;
-}
-
-.markdown-body h5 {
- font-size: 0.875em;
-}
-
-.markdown-body h6 {
- font-size: 0.85em;
- color: #6a737d;
-}
-
-.markdown-body ol,
-.markdown-body ul {
- padding-left: 2em;
-}
-
-.markdown-body ol ol,
-.markdown-body ol ul,
-.markdown-body ul ol,
-.markdown-body ul ul {
- margin-top: 0;
- margin-bottom: 0;
-}
-
-.markdown-body li {
- word-wrap: break-all;
-}
-
-.markdown-body li > p {
- margin-top: 16px;
-}
-
-.markdown-body li + li {
- margin-top: 0.25em;
-}
-
-.markdown-body dl {
- padding: 0;
-}
-
-.markdown-body dl dt {
- padding: 0;
- margin-top: 16px;
- font-size: 1em;
- font-style: italic;
- font-weight: 600;
-}
-
-.markdown-body dl dd {
- padding: 0 16px;
- margin-bottom: 16px;
-}
-
-.markdown-body table {
- display: block;
- width: 100%;
- overflow: auto;
-}
-
-.markdown-body table th {
- font-weight: 600;
-}
-
-.markdown-body table td,
-.markdown-body table th {
- padding: 6px 13px;
- border: 1px solid #dfe2e5;
-}
-
-.markdown-body table tr {
- background-color: #fff;
- border-top: 1px solid #c6cbd1;
-}
-
-.markdown-body table tr:nth-child(2n) {
- background-color: #f6f8fa;
-}
-
-.markdown-body img {
- max-width: 768px;
- box-sizing: initial;
- background-color: #fff;
- border-radius: 8px;
- margin: auto;
-}
-
-.markdown-body img[align='right'] {
- padding-left: 20px;
-}
-
-.markdown-body img[align='left'] {
- padding-right: 20px;
-}
-
-.markdown-body code {
- padding: 0.2em 0.4em;
- margin: 0;
- font-size: 85%;
- background-color: rgba(27, 31, 35, 0.05);
- border-radius: 3px;
-}
-
-.markdown-body pre {
- word-wrap: normal;
-}
-
-.markdown-body pre > code {
- padding: 0;
- margin: 0;
- font-size: 100%;
- word-break: normal;
- white-space: pre;
- background: transparent;
- color: #d4d4d4;
- border: 0;
-}
-
-.markdown-body .highlight {
- margin-bottom: 16px;
-}
-
-.markdown-body .highlight pre {
- margin-bottom: 0;
- word-break: normal;
-}
-
-.markdown-body .highlight pre,
-.markdown-body pre {
- padding: 16px;
- overflow: auto;
- font-size: 85%;
- line-height: 1.45;
- background-color: #1e1e1e;
- border-radius: 3px;
-}
-
-.markdown-body pre code {
- display: inline;
- max-width: auto;
- padding: 0;
- margin: 0;
- overflow: visible;
- line-height: inherit;
- word-wrap: normal;
- background-color: initial;
- border: 0;
-}
-
-.markdown-body .commit-tease-sha {
- display: inline-block;
- font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
- font-size: 90%;
- color: #444d56;
-}
-
-.markdown-body .full-commit .btn-outline:not(:disabled):hover {
- color: #005cc5;
- border-color: #005cc5;
-}
-
-.markdown-body .blob-wrapper {
- overflow-x: auto;
- overflow-y: hidden;
-}
-
-.markdown-body .blob-wrapper-embedded {
- max-height: 240px;
- overflow-y: auto;
-}
-
-.markdown-body .blob-num {
- width: 1%;
- min-width: 50px;
- padding-right: 10px;
- padding-left: 10px;
- font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
- font-size: 12px;
- line-height: 20px;
- color: rgba(27, 31, 35, 0.3);
- text-align: right;
- white-space: nowrap;
- vertical-align: top;
- cursor: pointer;
- -webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
- user-select: none;
-}
-
-.markdown-body .blob-num:hover {
- color: rgba(27, 31, 35, 0.6);
-}
-
-.markdown-body .blob-num:before {
- content: attr(data-line-number);
-}
-
-.markdown-body .blob-code {
- position: relative;
- padding-right: 10px;
- padding-left: 10px;
- line-height: 20px;
- vertical-align: top;
-}
-
-.markdown-body .blob-code-inner {
- overflow: visible;
- font-family: SFMono-Regular, Consolas, Liberation Mono, Menlo, monospace;
- font-size: 12px;
- color: #24292e;
- word-wrap: normal;
- white-space: pre;
-}
-
-.markdown-body .pl-token.active,
-.markdown-body .pl-token:hover {
- cursor: pointer;
- background: #ffea7f;
-}
-
-.markdown-body .tab-size[data-tab-size='1'] {
- -moz-tab-size: 1;
- tab-size: 1;
-}
-
-.markdown-body .tab-size[data-tab-size='2'] {
- -moz-tab-size: 2;
- tab-size: 2;
-}
-
-.markdown-body .tab-size[data-tab-size='3'] {
- -moz-tab-size: 3;
- tab-size: 3;
-}
-
-.markdown-body .tab-size[data-tab-size='4'] {
- -moz-tab-size: 4;
- tab-size: 4;
-}
-
-.markdown-body .tab-size[data-tab-size='5'] {
- -moz-tab-size: 5;
- tab-size: 5;
-}
-
-.markdown-body .tab-size[data-tab-size='6'] {
- -moz-tab-size: 6;
- tab-size: 6;
-}
-
-.markdown-body .tab-size[data-tab-size='7'] {
- -moz-tab-size: 7;
- tab-size: 7;
-}
-
-.markdown-body .tab-size[data-tab-size='8'] {
- -moz-tab-size: 8;
- tab-size: 8;
-}
-
-.markdown-body .tab-size[data-tab-size='9'] {
- -moz-tab-size: 9;
- tab-size: 9;
-}
-
-.markdown-body .tab-size[data-tab-size='10'] {
- -moz-tab-size: 10;
- tab-size: 10;
-}
-
-.markdown-body .tab-size[data-tab-size='11'] {
- -moz-tab-size: 11;
- tab-size: 11;
-}
-
-.markdown-body .tab-size[data-tab-size='12'] {
- -moz-tab-size: 12;
- tab-size: 12;
-}
-
-.markdown-body .task-list-item {
- list-style-type: none;
-}
-
-.markdown-body .task-list-item + .task-list-item {
- margin-top: 3px;
-}
-
-.markdown-body .task-list-item input {
- margin: 0 0.2em 0.25em -1.6em;
- vertical-align: middle;
-}
-
-@media (prefers-color-scheme: dark) {
- .markdown-body {
- /* color: #c9d1d9; */
- /* background-color: #0d1117; */
- color: #f3f4f6;
- background-color: #18181b;
- }
- .markdown-body a {
- color: rgba(2, 132, 199);
- }
- .markdown-body hr {
- border-bottom: 1px solid #21262d;
- border-bottom-color: #21262d;
- background-color: #30363d;
- }
- .markdown-body kbd {
- color: #b1bac4;
- background-color: #0d1117;
- border: 1px solid #6e7681;
- box-shadow: inset 0 -1px 0 #6e7681;
- }
- .markdown-body :checked + .radio-label {
- border-color: rgba(56, 139, 253, 0.4);
- }
- .markdown-body .border {
- border: 1px solid #30363d !important;
- }
- .markdown-body .border-bottom {
- border-bottom: 1px solid #30363d !important;
- }
- .markdown-body .bg-white {
- background-color: #0d1117 !important;
- }
- .markdown-body .bg-gray-light {
- background-color: #0d1117 !important;
- }
- .markdown-body .text-gray-light {
- color: #8b949e !important;
- }
- .markdown-body .pl-c {
- color: #8b949e;
- }
- .markdown-body .pl-c1,
- .markdown-body .pl-s .pl-v {
- color: #79c0ff;
- }
- .markdown-body .pl-e,
- .markdown-body .pl-en {
- color: #d2a8ff;
- }
- .markdown-body .pl-s .pl-s1,
- .markdown-body .pl-smi {
- color: #c9d1d9;
- }
- .markdown-body .pl-ent {
- color: #7ee787;
- }
- .markdown-body .pl-k {
- color: #ff7b72;
- }
- .markdown-body .pl-pds,
- .markdown-body .pl-s,
- .markdown-body .pl-s .pl-pse .pl-s1,
- .markdown-body .pl-sr,
- .markdown-body .pl-sr .pl-cce,
- .markdown-body .pl-sr .pl-sra,
- .markdown-body .pl-sr .pl-sre {
- color: #a5d6ff;
- }
- .markdown-body .pl-smw,
- .markdown-body .pl-v {
- color: #ffa657;
- }
- .markdown-body .pl-bu {
- color: #f85149;
- }
- .markdown-body .pl-ii {
- color: #f0f6fc;
- background-color: #8e1519;
- }
- .markdown-body .pl-c2 {
- color: #f0f6fc;
- background-color: #b62324;
- }
- .markdown-body .pl-sr .pl-cce {
- color: #7ee787;
- }
- .markdown-body .pl-ml {
- color: #f2cc60;
- }
- .markdown-body .pl-mh,
- .markdown-body .pl-mh .pl-en,
- .markdown-body .pl-ms {
- color: #1f6feb;
- }
- .markdown-body .pl-mi {
- color: #c9d1d9;
- }
- .markdown-body .pl-mb {
- color: #c9d1d9;
- }
- .markdown-body .pl-md {
- color: #ffdcd7;
- background-color: #67060c;
- }
- .markdown-body .pl-mi1 {
- color: #aff5b4;
- background-color: #033a16;
- }
- .markdown-body .pl-mc {
- color: #ffdfb6;
- background-color: #5a1e02;
- }
- .markdown-body .pl-mi2 {
- color: #c9d1d9;
- background-color: #1158c7;
- }
- .markdown-body .pl-mdr {
- color: #d2a8ff;
- }
- .markdown-body .pl-ba {
- color: #8b949e;
- }
- .markdown-body .pl-sg {
- color: #484f58;
- }
- .markdown-body .pl-corl {
- color: #a5d6ff;
- }
- .markdown-body blockquote {
- color: #8b949e;
- border-left: 0.25em solid #3b434b;
- }
- .markdown-body h1,
- .markdown-body h2 {
- border-bottom: 1px solid #21262d;
- }
- .markdown-body h6 {
- color: #8b949e;
- }
- .markdown-body table td,
- .markdown-body table th {
- border: 1px solid #3b434b;
- }
- .markdown-body table tr {
- background-color: #0d1117;
- border-top: 1px solid #272c32;
- }
- .markdown-body table tr:nth-child(2n) {
- background-color: #161b22;
- }
- .markdown-body img {
- background-color: #0d1117;
- }
- .markdown-body code {
- background-color: rgba(240, 246, 252, 0.15);
- }
- .markdown-body .highlight pre,
- .markdown-body pre {
- background-color: #1f1f22;
- }
- .markdown-body .commit-tease-sha {
- color: #b1bac4;
- }
- .markdown-body .blob-num {
- color: rgba(240, 246, 252, 0.3);
- }
- .markdown-body .blob-num:hover {
- color: rgba(240, 246, 252, 0.6);
- }
- .markdown-body .blob-code-inner {
- color: #c9d1d9;
- }
-}
\ No newline at end of file
diff --git a/src/types/googleapis.ts b/src/types/googleapis.ts
index 273ed49..736f112 100644
--- a/src/types/googleapis.ts
+++ b/src/types/googleapis.ts
@@ -94,15 +94,6 @@ export interface SearchResponse extends APIResponse {
files: (TFile | drive_v3.Schema$File)[];
}
-export interface ReadmeResponse extends APIResponse {
- file: TFile | drive_v3.Schema$File;
-}
-
-export interface PasswordResponse extends APIResponse {
- passwordRequired: boolean;
- passwordValidated: boolean;
-}
-
export interface ErrorResponse extends APIResponse {
code: number;
errors: {
diff --git a/src/types/jwt.ts b/src/types/jwt.ts
index 02b34e3..59c76cd 100644
--- a/src/types/jwt.ts
+++ b/src/types/jwt.ts
@@ -9,8 +9,3 @@ export interface ExpiredJWTPayload {
exp: number;
isExpired: boolean;
}
-
-export interface ProtectionPayload {
- fileId: string;
- password: string;
-}
diff --git a/src/utils/driveHelper.ts b/src/utils/driveHelper.ts
index 07ba168..ab1f7d5 100644
--- a/src/utils/driveHelper.ts
+++ b/src/utils/driveHelper.ts
@@ -33,44 +33,6 @@ export function buildQuery({
return query.join(" and ");
}
-export async function _checkProtected(id: string) {
- try {
- const files = await drive.files.list({
- q: id ? buildQuery({ id }) : buildQuery({}),
- fields: "files(id)",
- });
-
- return {
- protected: files.data.files?.length,
- id: files.data.files?.[0].id || null,
- };
- } catch (error: any) {
- return {
- protected: false,
- id: null,
- };
- }
-}
-
-export async function _validateFolderPassword(
- passwordFileId: string,
- password: string,
-) {
- try {
- const folderPassword = await drive.files.get(
- {
- fileId: passwordFileId,
- alt: "media",
- },
- { responseType: "text" },
- );
-
- return folderPassword.data === password;
- } catch (error: any) {
- return false;
- }
-}
-
export async function validateProtected(
fileId: string | TFileParent[],
passwordHash?: string,
diff --git a/src/utils/mimeTypesHelper.ts b/src/utils/mimeTypesHelper.ts
index d1660e1..3d0bffa 100644
--- a/src/utils/mimeTypesHelper.ts
+++ b/src/utils/mimeTypesHelper.ts
@@ -4,7 +4,6 @@ import {
BsBoxFill,
BsDatabaseFill,
BsFileEarmarkBinaryFill,
- BsFileEarmarkBreakFill,
BsFileEarmarkCodeFill,
BsFileEarmarkFill,
BsFileEarmarkFontFill,
@@ -13,14 +12,11 @@ import {
BsFileEarmarkPdfFill,
BsFileEarmarkPlayFill,
BsFileEarmarkRichtextFill,
- BsFileEarmarkRuledFill,
BsFileEarmarkSlidesFill,
BsFileEarmarkSpreadsheetFill,
BsFileEarmarkTextFill,
BsFileEarmarkWordFill,
BsFileEarmarkZipFill,
- BsFillDatabaseFill,
- BsFolderFill,
} from "react-icons/bs";
import ModelPreview from "@components/FilePreview/ModelPreview";
import AudioPreview from "@components/FilePreview/AudioPreview";
@@ -33,7 +29,7 @@ import CodePreview from "@components/FilePreview/CodePreview";
import TextPreview from "@components/FilePreview/TextPreview";
import VideoPreview from "@components/FilePreview/VideoPreview";
-export default function findMimeType(extension: string): string {
+function findMimeType(extension: string): string {
return mime.lookup(extension) || "application/octet-stream";
}
diff --git a/src/utils/swrFetch.ts b/src/utils/swrFetch.ts
index 86fdea2..8b8c273 100644
--- a/src/utils/swrFetch.ts
+++ b/src/utils/swrFetch.ts
@@ -4,17 +4,6 @@ import { FilesResponse } from "@/types/googleapis";
const fetcher = async (url: string, headers: Record = {}) =>
axios.get(url, { headers }).then((res) => res.data);
-function getNextKey(
- pageIndex: number,
- previousPageData: FilesResponse,
-): string | null {
- if (previousPageData && !previousPageData.nextPageToken) {
- return null;
- }
- const pageToken = previousPageData ? previousPageData.nextPageToken : "";
- return `/api/files?pageToken=${pageToken}`;
-}
-
export function buildNextKey(apiURL: string) {
return (pageIndex: number, previousPageData: FilesResponse) => {
if (previousPageData && !previousPageData.nextPageToken) {