Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 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
010f73e
work on showing dev
ddbruce Jan 3, 2026
59477d6
fix some stuff
ddbruce Jan 3, 2026
cb8f690
1.8.1
ddbruce Jan 3, 2026
3874286
update help
ddbruce Jan 3, 2026
5e74e45
Merge branch 'dan/patch/fix-sessions' of github.com:darkbluellc/fulls…
ddbruce Jan 3, 2026
25b3769
update help
ddbruce Jan 3, 2026
52d00d2
1.8.2
ddbruce Jan 3, 2026
39a84c5
Merge branch 'main' into dan/patch/show-dev
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.1",
"version": "1.8.2",
"description": "Fullsend allows allowed users to send bulk text messages to groups of recipients",
"main": "server.js",
"scripts": {
Expand Down
5 changes: 4 additions & 1 deletion public/changepassword.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<link rel="icon" type="image/png" sizes="16x16" href="/public/img/favicon/favicon-16x16.png">
<link rel="manifest" href="/public/img/favicon/site.webmanifest">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="/public/css/style.min.css">
<script src="/public/js/main.js"></script>
<script src="/public/js/changepassword.js"></script>
<title>Fullsend | SMS notification from the web</title>
Expand Down Expand Up @@ -41,6 +41,9 @@
</li>
</ul>
<ul class="navbar-nav d-flex">
<li class="nav-item">
<a class="nav-link text-danger" href="#" id="navDev" style="display:none;">DEV MODE</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="/" id="navVersion"></a>
</li>
Expand Down
1 change: 1 addition & 0 deletions public/css/style.min.css

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

1 change: 1 addition & 0 deletions public/css/style.min.css.map

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

4 changes: 3 additions & 1 deletion public/css/style.scss
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,9 @@
}
}


#navDev {
cursor: default;
}

.imessage {
display: flex;
Expand Down
5 changes: 4 additions & 1 deletion public/fullsend.html
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/select2-bootstrap-5-theme@1.3.0/dist/select2-bootstrap-5-theme.min.css" />
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="/public/css/style.min.css">
<script src="/public/js/main.js"></script>
<script src="/public/js/fullsend.js"></script>
<title>Fullsend | SMS notification from the web</title>
Expand Down Expand Up @@ -60,6 +60,9 @@ <h5 class="modal-title" id="recipientListModalLabel">Selected recipients</h5>
</li>
</ul>
<ul class="navbar-nav d-flex">
<li class="nav-item">
<a class="nav-link text-danger" href="#" id="navDev" style="display:none;">DEV MODE</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="/" id="navVersion"></a>
</li>
Expand Down
5 changes: 4 additions & 1 deletion public/group-management.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<link rel="icon" type="image/png" sizes="32x32" href="/public/img/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/public/img/favicon/favicon-16x16.png">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="/public/css/style.min.css">
<script src="/public/js/main.js"></script>
<script src="/public/js/group-management.js"></script>
<title>Fullsend | SMS notification from the web</title>
Expand Down Expand Up @@ -40,6 +40,9 @@
</li>
</ul>
<ul class="navbar-nav d-flex">
<li class="nav-item">
<a class="nav-link text-danger" href="#" id="navDev" style="display:none;">DEV MODE</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="/" id="navVersion"></a>
</li>
Expand Down
9 changes: 8 additions & 1 deletion public/help.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<link rel="icon" type="image/png" sizes="16x16" href="/public/img/favicon/favicon-16x16.png">
<link rel="manifest" href="/public/img/favicon/site.webmanifest">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="/public/css/style.min.css">
<script src="/public/js/main.js"></script>
<script src="/public/js/help.js"></script>
<title>Fullsend | SMS notification from the web</title>
Expand Down Expand Up @@ -40,6 +40,9 @@
</li>
</ul>
<ul class="navbar-nav d-flex">
<li class="nav-item">
<a class="nav-link text-danger" href="#" id="navDev" style="display:none;">DEV MODE</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="/" id="navVersion"></a>
</li>
Expand All @@ -63,6 +66,10 @@ <h1>Fullsend</h1>
<div class="row mt-5">
<div class="col">
<h2>Changelog</h2><br>
<h3>v1.8.2</h3>
<p>
Adds a flag for development that shows "DEV MODE" in the navbar.
</p>
<h3>v1.8.1</h3>
<p>
Fixes how sessions are handled on the user's side.
Expand Down
5 changes: 4 additions & 1 deletion public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<link rel="icon" type="image/png" sizes="16x16" href="/public/img/favicon/favicon-16x16.png">
<link rel="manifest" href="/public/img/favicon/site.webmanifest">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="/public/css/style.min.css">
<script src="/public/js/main.js"></script>
<script src="/public/js/home.js"></script>
<title>Fullsend | SMS notification from the web</title>
Expand Down Expand Up @@ -40,6 +40,9 @@
</li>
</ul>
<ul class="navbar-nav d-flex">
<li class="nav-item">
<a class="nav-link text-danger" href="#" id="navDev" style="display:none;">DEV MODE</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="/" id="navVersion"></a>
</li>
Expand Down
17 changes: 13 additions & 4 deletions public/js/fullsend.js
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,11 @@ const handleSwitch = async (e) => {
};

const sendMessage = async () => {
// Respect server-side sending flag exposed via APP_CONFIG
if (window.APP_CONFIG && window.APP_CONFIG.sendingEnabled === false) {
alert('Sending is disabled in this environment.');
return -1;
}
let error = false;
document.getElementById("noMessageError").style.display = "none";
document.getElementById("noRecipientsError").style.display = "none";
Expand Down Expand Up @@ -156,11 +161,15 @@ const sendMessage = async () => {
const handleMessagePreview = () => {
const fsmText = document.getElementById("fullsendMessage").value.trim();

if (fsmText != "") {
document.getElementById("sendButton").disabled = false;
}
else {
// If sending is disabled by config, keep send button disabled
if (window.APP_CONFIG && window.APP_CONFIG.sendingEnabled === false) {
document.getElementById("sendButton").disabled = true;
} else {
if (fsmText != "") {
document.getElementById("sendButton").disabled = false;
} else {
document.getElementById("sendButton").disabled = true;
}
}

const selectedCategories = getSelectedGroupsCategories();
Expand Down
30 changes: 28 additions & 2 deletions public/js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,17 @@ const getVersion = async () => {
return version;
};

const getConfig = async () => {
try {
const resp = await fetch('/api/config');
if (!resp.ok) return { success: false };
return resp.json();
} catch (e) {
console.error('Failed to load config', e && e.message);
return { success: false };
}
};

const printVersionInNav = async () => {
document.getElementById("navVersion").text = await getVersion();
};
Expand Down Expand Up @@ -85,8 +96,23 @@ checkForRedirect();

window.onload = async () => {
printVersionInNav();

// load runtime config (DEV mode and sending enabled)
const cfg = await getConfig();
if (cfg && cfg.success && cfg.data) {
window.APP_CONFIG = cfg.data;
if (cfg.data.dev) {
const nd = document.getElementById('navDev');
if (nd) nd.style.display = 'block';
}
// If sending is disabled, disable send button to prevent user attempts
if (!cfg.data.sendingEnabled) {
const sendBtn = document.getElementById('sendButton');
if (sendBtn) sendBtn.disabled = true;
}
}

pageOnLoadFunctions();

if (await isAdmin())
document.getElementById("adminNavLink").style.display = "block";
if (await isAdmin()) document.getElementById("adminNavLink").style.display = "block";
};
5 changes: 4 additions & 1 deletion public/login.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<link rel="icon" type="image/png" sizes="16x16" href="/public/img/favicon/favicon-16x16.png">
<link rel="manifest" href="/public/img/favicon/site.webmanifest">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="/public/css/style.min.css">
<script src="/public/js/main.js"></script>
<script src="/public/js/login.js"></script>
<title>Fullsend | SMS notification from the web</title>
Expand All @@ -34,6 +34,9 @@
</li>
</ul>
<ul class="navbar-nav d-flex">
<li class="nav-item">
<a class="nav-link text-danger" href="#" id="navDev" style="display:none;">DEV MODE</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="/" id="navVersion"></a>
</li>
Expand Down
5 changes: 4 additions & 1 deletion public/no-access.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<link rel="icon" type="image/png" sizes="16x16" href="/public/img/favicon/favicon-16x16.png">
<link rel="manifest" href="/public/img/favicon/site.webmanifest">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="/public/css/style.min.css">
<script src="/public/js/main.js"></script>
<script src="/public/js/help.js"></script>
<title>Fullsend | SMS notification from the web</title>
Expand Down Expand Up @@ -40,6 +40,9 @@
</li>
</ul>
<ul class="navbar-nav d-flex">
<li class="nav-item">
<a class="nav-link text-danger" href="#" id="navDev" style="display:none;">DEV MODE</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="/" id="navVersion"></a>
</li>
Expand Down
5 changes: 4 additions & 1 deletion public/privacy.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<link rel="icon" type="image/png" sizes="16x16" href="/public/img/favicon/favicon-16x16.png">
<link rel="manifest" href="/public/img/favicon/site.webmanifest">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="/public/css/style.min.css">
<script src="/public/js/main.js"></script>
<script src="/public/js/help.js"></script>
<title>Fullsend | SMS notification from the web</title>
Expand Down Expand Up @@ -40,6 +40,9 @@
</li>
</ul>
<ul class="navbar-nav d-flex">
<li class="nav-item">
<a class="nav-link text-danger" href="#" id="navDev" style="display:none;">DEV MODE</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="/" id="navVersion"></a>
</li>
Expand Down
5 changes: 4 additions & 1 deletion public/terms.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
<link rel="icon" type="image/png" sizes="16x16" href="/public/img/favicon/favicon-16x16.png">
<link rel="manifest" href="/public/img/favicon/site.webmanifest">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-gH2yIJqKdNHPEq0n4Mqa/HGKIhSkIHeL5AyhkYV8i59U5AR6csBvApHHNl/vI1Bx" crossorigin="anonymous">
<link rel="stylesheet" href="/public/css/style.css">
<link rel="stylesheet" href="/public/css/style.min.css">
<script src="/public/js/main.js"></script>
<script src="/public/js/help.js"></script>
<title>Fullsend | SMS notification from the web</title>
Expand Down Expand Up @@ -40,6 +40,9 @@
</li>
</ul>
<ul class="navbar-nav d-flex">
<li class="nav-item">
<a class="nav-link text-danger" href="#" id="navDev" style="display:none;">DEV MODE</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="/" id="navVersion"></a>
</li>
Expand Down
13 changes: 13 additions & 0 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,19 @@ app.get('/api/login', async (req, res) => {
}
});

// Public config endpoint for client-side behavior toggles (DEV mode, sending enabled)
app.get('/api/config', (req, res) => {
try {
const dev = String(process.env.DEV || '').toLowerCase() === 'true';
// If DEV is true, force sending disabled
const sendingEnabled = dev ? false : (String(process.env.SENDING_ENABLED || '').toLowerCase() === 'true');
res.send({ success: true, data: { dev, sendingEnabled } });
} catch (e) {
console.error('config endpoint failed', e && e.message);
res.status(500).send({ success: false });
}
});

// Debug endpoint (no role enforcement) to inspect session info during development
app.get('/api/debug/session', async (req, res) => {
try {
Expand Down