Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
d620d04
fix session last_seen code
ddbruce Oct 25, 2025
8316c55
update changelog
ddbruce Oct 25, 2025
a484b7d
1.7.1
ddbruce Oct 25, 2025
506b7a3
1.7.2
ddbruce Oct 25, 2025
8817cf3
trying to fix versioning
ddbruce Oct 25, 2025
71bff33
1.7.1
ddbruce Oct 25, 2025
98a6a28
try to fix session logout code
ddbruce Oct 25, 2025
42d06ae
trying
ddbruce Oct 25, 2025
f862a62
update changelog
ddbruce Oct 25, 2025
88f91c4
1.7.2
ddbruce Oct 25, 2025
d170113
Merge branch 'main' into dev
ddbruce Oct 25, 2025
9e631b5
disabled send button during sending loop
ddbruce Oct 28, 2025
324bad6
add delay to dev sending mode
ddbruce Oct 28, 2025
4aa5e59
update timeout
ddbruce Oct 28, 2025
e326540
update timeout code
ddbruce Oct 28, 2025
fff065d
try it with async/await
ddbruce Oct 29, 2025
a4d4810
disable textarea while sending
ddbruce Oct 29, 2025
84079bc
1.7.3
ddbruce Oct 29, 2025
925c9d4
update changelog
ddbruce Oct 29, 2025
61cc663
Merge branch 'main' into dev
ddbruce Oct 29, 2025
1f940aa
oauth from copilot
ddbruce Dec 28, 2025
aac077d
work
ddbruce Dec 28, 2025
d6072e6
work
ddbruce Dec 28, 2025
2f0c28a
changes
ddbruce Dec 28, 2025
5ed02da
work on user syncing and stuff
ddbruce Dec 28, 2025
013060a
admin work
ddbruce Dec 28, 2025
483cbf1
more admin work
ddbruce Dec 28, 2025
1ea6592
auth work
ddbruce Dec 28, 2025
dca8877
admin/auth work
ddbruce Dec 28, 2025
fb5709e
admin/auth work
ddbruce Dec 28, 2025
18ff5f0
add no-access page
ddbruce Dec 28, 2025
1f2e48d
add route for no-access page
ddbruce Dec 28, 2025
1aa4be6
clean up no-access page
ddbruce Dec 28, 2025
56594ec
fix something
ddbruce Dec 28, 2025
12ed8d4
1.8.0
ddbruce Dec 28, 2025
341c679
update help
ddbruce Dec 28, 2025
d24877f
work on fixing sessions
ddbruce Jan 3, 2026
cb8f690
1.8.1
ddbruce Jan 3, 2026
3874286
update help
ddbruce Jan 3, 2026
972948b
Merge branch 'main' into dan/patch/fix-sessions
ddbruce Jan 3, 2026
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
4 changes: 2 additions & 2 deletions package-lock.json

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

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fullsend",
"version": "1.8.0",
"version": "1.8.1",
"description": "Fullsend allows allowed users to send bulk text messages to groups of recipients",
"main": "server.js",
"scripts": {
Expand Down
4 changes: 4 additions & 0 deletions public/help.html
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ <h1>Fullsend</h1>
<div class="row mt-5">
<div class="col">
<h2>Changelog</h2><br>
<h3>v1.8.1</h3>
<p>
Fixes how sessions are handled on the user's side.
</p>
<h3>v1.8.0</h3>
<p>
Adds (finally!) authentication via OpenID Connect (OIDC) and Keycloak. Users must have the <code>fullsend_access</code> role in Keycloak to use the application and <code>fullsend_admin</code> to administer it.
Expand Down
11 changes: 10 additions & 1 deletion server.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,20 @@ const pool = mariadb.createPool({
const PORT = process.env.PORT || 8080;

// Session middleware (required for server-side login flow)
// Configure cookie maxAge from env (seconds) and enable rolling so the cookie
// expiration is refreshed on each response. Defaults to 7 days.
const sessionMaxAgeSeconds = parseInt(process.env.SESSION_MAX_AGE || '604800', 10); // 7 days
app.use(session({
secret: process.env.SESSION_SECRET || 'a very long secret',
resave: false,
saveUninitialized: false,
cookie: { secure: false }, // set secure: true if using HTTPS
rolling: true, // refresh cookie expiration on every response
cookie: {
secure: (process.env.NODE_ENV === 'production'), // set to true in prod when using HTTPS
httpOnly: true,
sameSite: 'lax',
maxAge: sessionMaxAgeSeconds * 1000,
},
}));

// Initialize OIDC discovery (will be awaited before server starts)
Expand Down