Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .env.dev
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ export THUMBNAIL_VIDEO_LOCATION=50
export SECRET_KEY=dev-test-key
export DATA_DIRECTORY=$(pwd)/dev_root/dev_data/
export VIDEO_DIRECTORY=$(pwd)/dev_root/dev_videos/
export IMAGE_DIRECTORY=$(pwd)/dev_root/dev_images/
export PROCESSED_DIRECTORY=$(pwd)/dev_root/dev_processed/
export STEAMGRIDDB_API_KEY=""
export ADMIN_PASSWORD=admin
Expand Down
1 change: 1 addition & 0 deletions .env.prod
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export FLASK_APP="/app/server/fireshare:create_app()"
export DATA_DIRECTORY=/data/
export VIDEO_DIRECTORY=/videos/
export IMAGE_DIRECTORY=/images/
export PROCESSED_DIRECTORY=/processed/
export TEMPLATE_PATH=/app/server/fireshare/templates
export ENVIRONMENT=production
Expand Down
1 change: 1 addition & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -159,6 +159,7 @@ ENV FLASK_APP /app/server/fireshare:create_app()
ENV ENVIRONMENT production
ENV DATA_DIRECTORY /data
ENV VIDEO_DIRECTORY /videos
ENV IMAGE_DIRECTORY /images
ENV PROCESSED_DIRECTORY /processed
ENV TEMPLATE_PATH=/app/server/fireshare/templates
ENV ADMIN_PASSWORD admin
Expand Down
3 changes: 2 additions & 1 deletion EnvironmentVariables.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,12 @@
| `ANALYTICS_TRACKING_SCRIPT` | A full `<script>` tag from an analytics provider (e.g. Umami, Plausible) to inject into the frontend. | |
| `TZ` | Timezone for the container. | `UTC` |
| `FS_LOGLEVEL` | Log level for the application. Valid values: `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`. | `INFO` |
| `THUMBNAIL_VIDEO_LOCATION` | The timestamp (in seconds) used to capture the video thumbnail preview. | `50` |
| **Storage** | | |
| `DATA_DIRECTORY` | Absolute path to the directory where application database and metadata are stored. | `$(pwd)/fireshare/data/` | Yes |
| `PROCESSED_DIRECTORY` | Absolute path to the directory where derived data e.x optimized/transcoded videos, symlinks, posters... are stored. | `$(pwd)/fireshare/processed/` | Yes |
| `VIDEO_DIRECTORY` | Absolute path to the source directory containing raw video files. | `$(pwd)/path/to/my/videos/` | Yes |
| `THUMBNAIL_VIDEO_LOCATION` | The timestamp (in seconds) used to capture the video thumbnail preview. | `50` |
| `IMAGE_DIRECTORY` | Absolute path to the source directory containing raw image files. | `$(pwd)/path/to/my/images/` | Yes |
| **Security** | | |
| `SECRET_KEY` | Flask session encryption key. If not set, a random key is generated on each restart, which invalidates all active sessions. | some random string or phrase |
| `ADMIN_USERNAME` | The username for the initial administrative account. | `admin` |
Expand Down
19 changes: 17 additions & 2 deletions app/client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion app/client/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fireshare",
"version": "1.5.7",
"version": "1.6.0",
"private": true,
"dependencies": {
"@emotion/react": "^11.9.0",
Expand All @@ -24,6 +24,7 @@
"react-player": "^2.10.1",
"react-router-dom": "^6.3.0",
"react-select": "^5.3.2",
"react-zoom-pan-pinch": "^4.0.3",
"typeface-roboto": "^1.1.13",
"wavesurfer.js": "^7.12.4"
},
Expand Down
233 changes: 129 additions & 104 deletions app/client/src/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@ import { createTheme, ThemeProvider } from '@mui/material/styles'
import { CssBaseline } from '@mui/material'
import Login from './views/Login'
import Watch from './views/Watch'
import ViewImage from './views/ViewImage'
import Dashboard from './views/Dashboard'
import NotFound from './views/NotFound'
import Settings from './views/Settings'
import Feed from './views/Feed'
import ImageFeed from './views/ImageFeed'
import Games from './views/Games'
import GameVideos from './views/GameVideos'
import Tags from './views/Tags'
Expand Down Expand Up @@ -39,116 +40,140 @@ export default function App() {
<ThemeProvider theme={muitheme}>
<CssBaseline />
<GlobalDragDropOverlay>
<Routes>
<Route
path="/"
element={
<AuthWrapper redirect={'/feed'}>
<Navbar20 page="/" collapsed={!drawerOpen} searchable styleToggle cardSlider searchPlaceholder="Search title, game, or #tag...">
<Dashboard />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/feed"
element={
<AuthWrapper>
<Navbar20 page="/feed" collapsed={!drawerOpen} searchable styleToggle cardSlider searchPlaceholder="Search title, game, or #tag...">
<Feed />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/login"
element={
<Navbar20 page="/login">
<Routes>
<Route
path="/"
element={
<AuthWrapper>
<Login />
<Navbar20
page="/"
collapsed={!drawerOpen}
searchable
styleToggle
cardSlider
searchPlaceholder="Search title, game, or #tag..."
>
<Dashboard />
</Navbar20>
</AuthWrapper>
</Navbar20>
}
/>
<Route
path="/settings"
element={
<AuthWrapper collapsed={!drawerOpen} redirect={'/login'}>
<Navbar20 page="/settings">
<Settings />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/games"
element={
<AuthWrapper>
<Navbar20 page="/games" collapsed={!drawerOpen} searchable searchPlaceholder="Search games...">
<Games />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/games/:gameId"
element={
<AuthWrapper>
<Navbar20 page="/games" collapsed={!drawerOpen} styleToggle cardSlider searchable mainPadding={0}>
<GameVideos />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/tags"
element={
<AuthWrapper>
<Navbar20 page="/tags" collapsed={!drawerOpen} searchable searchPlaceholder="Search tags...">
<Tags />
}
/>
<Route
path="/login"
element={
<Navbar20 page="/login">
<AuthWrapper>
<Login />
</AuthWrapper>
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/tags/:tagId"
element={
<AuthWrapper>
<Navbar20 page="/tags" collapsed={!drawerOpen} styleToggle cardSlider searchable mainPadding={0}>
<TagVideos />
}
/>
<Route
path="/settings"
element={
<AuthWrapper collapsed={!drawerOpen} redirect={'/login'}>
<Navbar20 page="/settings">
<Settings />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/games"
element={
<AuthWrapper>
<Navbar20 page="/games" collapsed={!drawerOpen} searchable searchPlaceholder="Search games...">
<Games />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/games/:gameId"
element={
<AuthWrapper>
<Navbar20 page="/games" collapsed={!drawerOpen} styleToggle cardSlider searchable mainPadding={0}>
<GameVideos />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/tags"
element={
<AuthWrapper>
<Navbar20 page="/tags" collapsed={!drawerOpen} searchable searchPlaceholder="Search tags...">
<Tags />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/tags/:tagId"
element={
<AuthWrapper>
<Navbar20 page="/tags" collapsed={!drawerOpen} styleToggle cardSlider searchable mainPadding={0}>
<TagVideos />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/watch/:id"
element={
<Navbar20 collapsed={true} page="/watch">
<AuthWrapper>
<Watch />
</AuthWrapper>
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="/watch/:id"
element={
<Navbar20 collapsed={true} page="/watch">
}
/>
<Route
path="/images"
element={
<AuthWrapper>
<Watch />
<Navbar20
page="/images"
collapsed={!drawerOpen}
styleToggle
cardSlider
searchable
searchPlaceholder="Search title, game, or #tag..."
>
<ImageFeed />
</Navbar20>
</AuthWrapper>
</Navbar20>
}
/>
<Route
path="/files"
element={
<AuthWrapper redirect={'/login'}>
<Navbar20 page="/files" collapsed={!drawerOpen}>
<FileManager />
}
/>
<Route
path="/image/:id"
element={
<Navbar20 collapsed={true} page="/image">
<AuthWrapper>
<ViewImage />
</AuthWrapper>
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="*"
element={
<AuthWrapper>
<NotFound />
</AuthWrapper>
}
/>
</Routes>
}
/>
<Route
path="/files"
element={
<AuthWrapper redirect={'/login'}>
<Navbar20 page="/files" collapsed={!drawerOpen}>
<FileManager />
</Navbar20>
</AuthWrapper>
}
/>
<Route
path="*"
element={
<AuthWrapper>
<NotFound />
</AuthWrapper>
}
/>
</Routes>
</GlobalDragDropOverlay>
</ThemeProvider>
</Router>
Expand Down
Loading