From fe3b5b0382bf000c1ba66b8be1186b15153f713d Mon Sep 17 00:00:00 2001 From: Mike Swanson Date: Fri, 17 Apr 2026 20:05:36 -0700 Subject: [PATCH] Add SAGE-SQL session manager app, shared work items board, update session log - Session manager: self-service RDP session reset for Dataforth users (Default.aspx + web.config) - WORKITEMS.md: shared task board for Mike/Howard with @tagging, syncs via Gitea - Session log: deployment deferred due to VPN connectivity issues Co-Authored-By: Claude Opus 4.6 (1M context) --- WORKITEMS.md | 38 ++ .../dataforth/session-manager/Default.aspx | 381 ++++++++++++++++++ clients/dataforth/session-manager/web.config | 18 + session-logs/2026-04-17-session.md | 46 +++ 4 files changed, 483 insertions(+) create mode 100644 WORKITEMS.md create mode 100644 clients/dataforth/session-manager/Default.aspx create mode 100644 clients/dataforth/session-manager/web.config diff --git a/WORKITEMS.md b/WORKITEMS.md new file mode 100644 index 0000000..b0a93c1 --- /dev/null +++ b/WORKITEMS.md @@ -0,0 +1,38 @@ +# Shared Work Items + +Tag yourself to claim. Check off when done. Add new items at the bottom of the relevant section. + +**Syntax:** `- [ ] Description — @mike/@howard/@unassigned | added YYYY-MM-DD` + +--- + +## Active + +- [ ] Deploy session manager to SAGE-SQL (IIS app, Windows Auth) — files ready at `clients/dataforth/session-manager/` — @mike | added 2026-04-17 +- [ ] Cascades Synology (cascadesds) — get admin creds, add to vault — @howard | added 2026-04-17 +- [ ] Howard Gitea account — create via web UI at git.azcomputerguru.com — @mike | added 2026-04-16 +- [ ] desertrat.com — add DMARC p=reject + harden SPF on Route 53 (need AWS access) — @unassigned | added 2026-04-17 +- [ ] desertrat.com — long-term migration from WebSvr to IX + MailProtector — @unassigned | added 2026-04-17 +- [ ] MVAN other domains — only mvaninc.com has DMARC; client has other domains needing protection — @unassigned | added 2026-04-17 +- [ ] Glaztech Syncro ticket #32165 — timer entry billed wrong (should be comment+time); fix in Syncro GUI — @mike | added 2026-04-17 +- [ ] jparkinsonaz.com certbot — retry autodiscover cert once A record TTL expires — @unassigned | added 2026-04-17 +- [ ] Neptune jparkinson password — set to jP$48504850, verify mail working — @unassigned | added 2026-04-17 +- [ ] Len's Auto Brokerage — deploy GuruRMM v0.6.1 to 10 Windows endpoints — @mike | added 2026-04-16 +- [ ] GuruRMM server migration 5 — sqlx checksum drift blocks new server build — @mike | added 2026-04-16 +- [ ] Jupiter Windows VM — Server 2022 build worker for MSI CI — @unassigned | added 2026-04-16 +- [ ] Cloudflare SXG — disable via dashboard (API tokens lack scope), auto-removes June 23 — @unassigned | added 2026-04-17 +- [ ] GrepAI index — run `grepai watch` to build semantic search index — @unassigned | added 2026-04-16 + +## Completed + +_Move items here when done. Keep for 30 days then delete._ + +--- + +## How to use + +- **Claim:** change `@unassigned` to your name +- **Add:** append to Active section with today's date +- **Complete:** move to Completed with date: `- [x] Description — @mike | done 2026-04-18` +- **Claude:** say "show work items" or "add work item: ..." and Claude reads/updates this file +- **Sync:** items sync via `/sync` like everything else diff --git a/clients/dataforth/session-manager/Default.aspx b/clients/dataforth/session-manager/Default.aspx new file mode 100644 index 0000000..d26027b --- /dev/null +++ b/clients/dataforth/session-manager/Default.aspx @@ -0,0 +1,381 @@ +<%@ Page Language="C#" AutoEventWireup="true" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.Web.Security" %> + + + + + + + Session Manager — SAGE-SQL + + + +
+
+
S
+
+

Session Manager

+

SAGE-SQL — Reset disconnected RemoteApp sessions

+
+
+ +
+ Signed in as <%= currentDisplayName %> + Refresh +
+ + <% if (!string.IsNullOrEmpty(statusMessage)) { %> +
<%= Server.HtmlEncode(statusMessage) %>
+ <% } %> + + <% if (userSessions.Count > 0) { %> + + + + + + + + + + + <% foreach (var s in userSessions) { %> + + + + + + + <% } %> + +
SessionStateIDAction
<%= string.IsNullOrEmpty(s.SessionName) ? "RemoteApp" : Server.HtmlEncode(s.SessionName) %> + "> + <%= s.State == "Disc" ? "Disconnected" : s.State %> + + #<%= s.Id %> + <% if (s.CanReset) { %> + Reset + <% } else { %> + Active + <% } %> +
+ <% } else { %> +
+
+

No sessions found for your account.
You're all clear.

+
+ <% } %> + + +
+ + diff --git a/clients/dataforth/session-manager/web.config b/clients/dataforth/session-manager/web.config new file mode 100644 index 0000000..ea2b968 --- /dev/null +++ b/clients/dataforth/session-manager/web.config @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/session-logs/2026-04-17-session.md b/session-logs/2026-04-17-session.md index b070a63..75aff4b 100644 --- a/session-logs/2026-04-17-session.md +++ b/session-logs/2026-04-17-session.md @@ -215,3 +215,49 @@ Built `/syncro` slash command for ticket management via Syncro REST API. - Ollama URL: `http://100.92.127.64:11434` - Firewall: inbound TCP 11434 from 100.0.0.0/8 only - Env var: `OLLAMA_HOST=0.0.0.0:11434` (User scope on DESKTOP-0O8A1RL) + +--- + +## Update: 20:00 — SAGE-SQL session manager, shared work items + +### Dataforth SAGE-SQL session manager — built, not yet deployed +Built self-service session reset web app for Dataforth users on SAGE-SQL (192.168.0.153, Windows Server 2016). + +**Problem:** Users connect via RemoteApps to SAGE. Sessions hang/disconnect and require IT to remote in and logoff sessions manually. + +**Solution:** Single-file ASP.NET WebForms app (`Default.aspx` + `web.config`) that: +- Uses Windows Authentication (auto-identifies domain user, no login needed) +- Shows only the authenticated user's own RDP/RemoteApp sessions +- Only allows resetting disconnected ("Disc") sessions, not active ones +- Confirmation prompt before reset +- Logs all reset actions to monthly log files at `~/logs/YYYY-MM.log` +- Dark themed UI + +**Files:** +- `clients/dataforth/session-manager/Default.aspx` — full app (server-side C# + HTML/CSS) +- `clients/dataforth/session-manager/web.config` — IIS config (Windows Auth on, Anonymous off) + +**Deployment blocked:** VPN connectivity issues — SSH to AD2 times out (ICMP works, TCP blocked), WinRM to SAGE-SQL blocked, RMM API at 172.16.3.30:3001 unreachable. Deferred to next session. + +**Deployment steps (for tomorrow):** +1. Create `C:\inetpub\sessions\` on SAGE-SQL +2. Copy Default.aspx + web.config to that directory +3. Create IIS application: `New-WebApplication -Name "sessions" -Site "Default Web Site" -PhysicalPath "C:\inetpub\sessions" -ApplicationPool "DefaultAppPool"` +4. Verify Windows Auth enabled, Anonymous Auth disabled +5. Test at `http://sage-sql/sessions/` +6. App pool identity (NetworkService) should have permission to run `logoff` command + +**WinRM TrustedHosts updated:** Added `192.168.0.153,SAGE-SQL` to local TrustedHosts for future NTLM auth (workstation not domain-joined). + +### Shared work items board — created +Created `WORKITEMS.md` at repo root — shared task list that syncs via Gitea. +- Both Mike and Howard can add/claim/complete items +- Uses `@mike`/`@howard`/`@unassigned` tagging +- Populated with all carry-over items from this session and previous days +- Claude can read/update it on request ("show work items", "add work item: ...") + +### Network issues (end of day) +- AD2 (192.168.0.6): ICMP ping works (23-46ms), SSH port 22 times out +- SAGE-SQL (192.168.0.153): WinRM port 5985 unreachable from workstation +- RMM server (172.16.3.30:3001): connection times out +- Likely VPN/firewall filtering TCP but passing ICMP