Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
ee130df
ahk-web scaffold
BenceKovari Jul 20, 2026
9130776
feat: add health and user management features
BenceKovari Jul 24, 2026
febd940
feat: add assignment management feature for courses
BenceKovari Jul 25, 2026
6356ab5
feat: update VPN configuration and routing in deployment workflow
BenceKovari Jul 25, 2026
5739d6d
feat: enhance CIFS mount process to handle credentials securely
BenceKovari Jul 25, 2026
7bbcf42
Add initial database migration, user Neptun validation tests, and web…
BenceKovari Jul 30, 2026
ffa871d
feat: enhance deployment workflow with new manifest handling and manu…
BenceKovari Jul 30, 2026
7482b3d
feat: add advisory template check for assignment creation
BenceKovari Aug 5, 2026
16929d8
assignment repo prefix, local deployment script
BenceKovari Aug 8, 2026
9d83616
refactor(portal): move the GitHub API surface onto Octokit
BenceKovari Aug 8, 2026
c3dd989
feat(portal): receive GitHub webhooks at /api/integrations/github
BenceKovari Aug 8, 2026
e507edc
feat(portal): accept CI evaluation results at /api/integrations/evalu…
BenceKovari Aug 8, 2026
4f4bfb9
test(portal): cover the ported webhook receiver and CI callback
BenceKovari Aug 8, 2026
db19ce4
docs: the portal now hosts every entry point
BenceKovari Aug 9, 2026
1241450
claude settings
BenceKovari Aug 9, 2026
cf75e8c
docs: record this session's working learnings in CLAUDE.md
BenceKovari Aug 9, 2026
a28be32
update claude md
BenceKovari Aug 9, 2026
b2f69e5
update webdeploy action
BenceKovari Aug 9, 2026
c434fd4
github workflows
BenceKovari Aug 9, 2026
97fae4b
Merge branch 'master' into local-hosting
BenceKovari Aug 9, 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
126 changes: 126 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
{
"permissions": {
"allow": [
"Bash(dotnet add *)",
"Bash(echo \"Moq added \\($?\\)\")",
"Bash(echo \"Mvc.Testing added \\($?\\)\")",
"Bash(echo \"EF InMemory added \\($?\\)\")",
"Bash(dotnet build *)",
"Bash(dotnet test *)",
"Bash(dotnet ef *)",
"Bash(sqllocaldb info *)",
"Bash(npm run *)",
"Bash(curl -sk -o /dev/null -w \"backend /api/auth/me → HTTP %{http_code}\\\\n\" https://localhost:7443/api/auth/me)",
"Bash(curl -sk -o /dev/null -w 'GET / → HTTP %{http_code}\\\\n' https://localhost:4200/)",
"Bash(curl -sk -o /dev/null -w 'HTTP %{http_code}\\\\n' https://localhost:4200/api/auth/me)",
"Bash(curl -sk -c C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/proxy_cookies.txt -X POST https://localhost:4200/api/auth/login -H 'Content-Type: application/json' -d '{\"userName\":\"instructor\",\"password\":\"Instructor123!\"}' -D - -o /dev/null)",
"Bash(echo \"exit=$?\")",
"Bash(MEM=\"C:/Users/beny314/.claude/projects/c--Source-ahk-github-automation/memory\"; ls -la \"$MEM\" 2>/dev/null && echo \"--- MEMORY.md ---\" && cat \"$MEM/MEMORY.md\" 2>/dev/null || echo \"no MEMORY.md yet\")",
"Read(//c/Users/beny314/.claude/projects/c--Source-ahk-github-automation/memory/**)",
"Bash(echo \"=== remaining in memory dir ===\")",
"Bash(ls -A C:/Users/beny314/.claude/projects/c--Source-ahk-github-automation/memory)",
"Bash(echo \"\\(empty\\)\")",
"Bash(curl -sk -c C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/c_admin.txt -X POST https://localhost:7443/api/auth/login -H 'Content-Type: application/json' -d '{\"userName\":\"admin\",\"password\":\"Admin123!\"}')",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/c_admin.txt https://localhost:7443/api/admin/courses)",
"Bash(curl -sk -c C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/c_inst.txt -X POST https://localhost:7443/api/auth/login -H 'Content-Type: application/json' -d '{\"userName\":\"instructor\",\"password\":\"Instructor123!\"}')",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/c_inst.txt https://localhost:7443/api/viaubc01/probe/notes)",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/c_inst.txt -o /dev/null -w 'cross-course viaubb01 → %{http_code} \\(expect 403\\)\\\\n' https://localhost:7443/api/viaubb01/probe/notes)",
"PowerShell(sqlcmd -S \"\\(localdb\\)\\\\MSSQLLocalDB\" -d AhkWeb -Q $q -h -1 -W)",
"Bash(dotnet new *)",
"Bash(rm -f Ahk.Web.Services/Class1.cs)",
"Bash(dotnet sln *)",
"Bash(curl -sk -c C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/adm.txt -X POST https://localhost:7443/api/auth/login -H 'Content-Type: application/json' -d '{\"userName\":\"admin\",\"password\":\"Admin123!\"}' -o /dev/null)",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/adm.txt https://localhost:7443/api/viaubb01/statuses)",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/adm.txt https://localhost:7443/api/viaubb01/grades)",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/adm.txt https://localhost:7443/api/viaubb01/grades/csv)",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/adm.txt https://localhost:7443/api/viaubc01/grades)",
"Bash(curl -sk -c C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/ins.txt -X POST https://localhost:7443/api/auth/login -H 'Content-Type: application/json' -d '{\"userName\":\"instructor\",\"password\":\"Instructor123!\"}' -o /dev/null)",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/ins.txt -o /dev/null -w ' /api/viaubb01/grades -> %{http_code} \\(expect 403\\)\\\\n' https://localhost:7443/api/viaubb01/grades)",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/ins.txt -o /dev/null -w ' /api/viaubc01/statuses -> %{http_code} \\(expect 200\\)\\\\n' https://localhost:7443/api/viaubc01/statuses)",
"Bash(curl -sk -c C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/p.txt -X POST https://localhost:4200/api/auth/login -H 'Content-Type: application/json' -d '{\"userName\":\"admin\",\"password\":\"Admin123!\"}' -o /dev/null -w 'login via proxy -> %{http_code}\\\\n')",
"Bash(curl -sk -b C:/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/8d87f62d-6109-437b-91ea-1cb12635e036/scratchpad/p.txt https://localhost:4200/api/viaubb01/statuses -w '\\\\nHTTP %{http_code}\\\\n')",
"Bash(grep -rl \"MapUniqueJsonKey\" \"C:/Program Files/dotnet/packs/Microsoft.AspNetCore.App.Ref/\" 2>/dev/null | head -3 *)",
"Read(//c/Program Files/dotnet/packs/Microsoft.AspNetCore.App.Ref/**)",
"Bash(DLL=\"C:/Program Files/dotnet/shared/Microsoft.AspNetCore.App/10.0.7/Microsoft.AspNetCore.Authentication.OAuth.dll\" *)",
"Read(//c/Program Files/dotnet/shared/Microsoft.AspNetCore.App/10.0.7/**)",
"Bash(ls ~/.nuget/packages/ 2>/dev/null | grep -i -E \"octokit|github\" ; echo \"---\"; cd ahk-frontend && cat package.json)",
"Read(//c/Users/beny314/.nuget/packages/**)",
"Read(//c/Users/beny314/.nuget/packages/octokit/**)",
"Read(//c/Users/beny314/.nuget/packages/microsoft.extensions.http/**)",
"Read(//c/Program Files/Microsoft SQL Server//**)",
"Bash(cp Ahk.Web.Services/Ahk.Web.Services.csproj /tmp/svc.bak)",
"Bash(ls -la ~/.claude/ 2>/dev/null | head -40; echo \"=== plugins ===\"; ls -la ~/.claude/plugins/ 2>/dev/null | head -40)",
"Read(//c/Users/beny314/.claude/**)",
"Read(//c/Users/beny314/.claude/plugins/**)",
"Bash(cd ~/.claude/plugins && cat known_marketplaces.json && echo \"=== installed ===\" && cat installed_plugins.json && echo \"=== marketplaces/ ===\" && ls marketplaces/ && echo \"=== cache/ ===\" && ls cache/ 2>/dev/null && echo \"=== repos/ ===\" && ls repos/ 2>/dev/null)",
"Bash(python -c ' *)",
"Bash(dotnet run *)",
"Bash(curl -sk https://localhost:7443/swagger/v1/swagger.json -o /dev/null)",
"Bash(curl -sk https://localhost:7443/swagger/v1/swagger.json -o /dev/null -w \"%{http_code}\\\\n\")",
"Bash(rm -f c.txt)",
"Bash(curl -sk -c c.txt -X POST https://localhost:7443/api/auth/login -H \"Content-Type: application/json\" -d '{\"userName\":\"admin\",\"password\":\"Admin123!\",\"rememberMe\":true}')",
"Bash(python -m json.tool)",
"Bash(curl -sk -b c.txt https://localhost:7443/api/admin/health)",
"PowerShell(Get-NetTCPConnection -LocalPort 7443 -State Listen -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -ErrorAction SilentlyContinue }; \"freed\")",
"Bash(python -)",
"Bash(curl -sk https://localhost:4200/ -o /dev/null)",
"PowerShell(foreach \\($p in 7443,4200\\) { Get-NetTCPConnection -LocalPort $p -State Listen -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -ErrorAction SilentlyContinue } }; \"ports freed\")",
"PowerShell(Get-NetTCPConnection -LocalPort 7443,4200 -State Listen -ErrorAction SilentlyContinue)",
"Bash(sqlcmd -S \"\\(localdb\\)\\\\MSSQLLocalDB\" -d AhkWeb -Q \"SET NOCOUNT ON; SELECT Id, UserName, NormalizedUserName, LockoutEnd, AccessFailedCount, LockoutEnabled, CASE WHEN PasswordHash IS NULL THEN 'NULL' ELSE 'set' END AS Pwd FROM AspNetUsers;\" -W -s\"|\")",
"Bash(curl -sk -X POST https://localhost:7443/api/auth/login -H \"Content-Type: application/json\" -d '{\"userName\":\"admin\",\"password\":\"Admin123!\",\"rememberMe\":true}' -w \"\\\\nHTTP %{http_code}\\\\n\")",
"Bash(curl -sk -X POST https://localhost:7443/api/auth/login -H \"Content-Type: application/json\" -d '{\"userName\":\"admin\",\"password\":\"Admin123!\"}' -o /dev/null -w \"HTTP %{http_code}\\\\n\")",
"Bash(curl -sk -X POST https://localhost:7443/api/auth/login -H \"Content-Type: application/json\" -d '{\"userName\":\"admin\",\"password\":\"nope\"}' -w \"\\\\nHTTP %{http_code}\\\\n\")",
"Bash(rm -f v.txt)",
"Bash(curl -sk -c v.txt -X POST https://localhost:4200/api/auth/login -H \"Content-Type: application/json\" -d '{\"userName\":\"admin\",\"password\":\"Admin123!\",\"rememberMe\":true}' -w \"\\\\nHTTP %{http_code}\\\\n\")",
"PowerShell(foreach \\($p in 7443,4200\\) { Get-NetTCPConnection -LocalPort $p -State Listen -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -ErrorAction SilentlyContinue } }; Start-Sleep -Milliseconds 500; $left = Get-NetTCPConnection -LocalPort 7443,4200 -State Listen -ErrorAction SilentlyContinue; if \\($null -eq $left\\) { \"both ports free\" } else { $left | Select-Object LocalPort, OwningProcess })",
"PowerShell(Get-NetTCPConnection -LocalPort 7443,4200 -State Listen -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force -ErrorAction SilentlyContinue }; Start-Sleep -Milliseconds 500; if \\($null -eq \\(Get-NetTCPConnection -LocalPort 7443,4200 -State Listen -ErrorAction SilentlyContinue\\)\\) { \"both ports free\" })",
"Bash(grep -nE \"^[0-9.]+ [0-9.]+ [0-9.]+ [0-9.]+ \\(k|K\\)$\")",
"Bash(sort -u -t: -k2)",
"Bash(python3 -)",
"Bash(python -c \"import yaml,sys; yaml.safe_load\\(open\\('.github/workflows/ahk-web-deploy.yaml'\\)\\); print\\('YAML OK'\\)\")",
"Bash(cd c:/Source/ahk-github-automation/ahk-backend && dotnet publish Ahk.Web.Server/Ahk.Web.Server.csproj -p:PublishProfile=Mezga -o /tmp/ahk-webconfig-test 2>&1 | tail -3 && echo \"=== generated web.config ===\" && cat /tmp/ahk-webconfig-test/web.config 2>/dev/null || echo \"NO web.config generated\")",
"Read(//tmp/ahk-webconfig-test/**)",
"Bash(rm -rf /tmp/ahk-webconfig-test && cd c:/Source/ahk-github-automation/ahk-backend && dotnet publish Ahk.Web.Server/Ahk.Web.Server.csproj -p:PublishProfile=Mezga -o /tmp/ahk-webconfig-test 2>&1 | tail -2 && echo \"=== published web.config ===\" && cat /tmp/ahk-webconfig-test/web.config)",
"Bash(rm -rf /tmp/ahk-webconfig-test && echo cleaned)",
"PowerShell(Get-NetTCPConnection -LocalPort 7443 -State Listen -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }; \"backend stopped\")",
"PowerShell(Get-NetTCPConnection -LocalPort 7443 -State Listen -ErrorAction SilentlyContinue | ForEach-Object { Stop-Process -Id $_.OwningProcess -Force }; \"checked\")",
"Bash(python -c \"import yaml; d=yaml.safe_load\\(open\\('.github/workflows/ahk-web-deploy.yaml'\\)\\); print\\('YAML OK'\\); print\\('inputs:', d['on']['workflow_dispatch']['inputs']\\)\")",
"Bash(awk '{print length\\($0\\)}')",
"Bash(where.exe rsync *)",
"Bash(wsl.exe rsync *)",
"Bash(wsl.exe -l -v)",
"Bash(wsl.exe bash -c ' *)",
"Bash(npm start *)",
"Bash(node shot.mjs)",
"Read(//c/Users/beny314/AppData/Local/Temp/claude/c--Source-ahk-github-automation/f74052ba-9e93-4760-8fe5-7c53f23ddecb/scratchpad/**)",
"Bash(sed 's#/admin/help/github?org=ahk-viaubc01#/admin/courses/1#; s/help-page.png/course-editor.png/' shot.mjs)",
"Bash(node shot2.mjs)",
"PowerShell(foreach \\($port in 7443,4200\\) { try { Get-NetTCPConnection -LocalPort $port -State Listen -ErrorAction Stop | Select-Object -ExpandProperty OwningProcess -Unique | ForEach-Object { Stop-Process -Id $_ -Force -ErrorAction SilentlyContinue } } catch {} }; Write-Output \"stopped\")",
"Bash(node -e \"const {readFileSync}=require\\('fs'\\); const b=readFileSync\\('help-page.png'\\); console.log\\('png bytes:', b.length\\);\")",
"Bash(node shot3.mjs)",
"PowerShell(try { Get-NetTCPConnection -LocalPort 7443 -State Listen -ErrorAction Stop | Select-Object -ExpandProperty OwningProcess -Unique | ForEach-Object { Stop-Process -Id $_ -Force -ErrorAction SilentlyContinue } } catch {}; Write-Output \"backend stopped\")",
"Bash(node shot4.mjs)",
"Bash(wsl.exe bash *)",
"Bash(node shot5.mjs)",
"Bash(git add *)",
"Bash(git commit *)",
"Bash(curl -sk -o /dev/null -w \"\" https://localhost:7443/swagger/v1/swagger.json)",
"Bash(break)",
"Bash(curl -sk -X POST https://localhost:7443/api/integrations/github -H 'Content-Type: application/json' -d '{}' -w \"\\\\nHTTP %{http_code}\\\\n\")",
"Bash(curl -sk -X POST https://localhost:7443/api/integrations/evaluation-result -H 'Content-Type: application/json' -d '{}' -w \"\\\\nHTTP %{http_code}\\\\n\")",
"Bash(node -e ' *)",
"Bash(python3 -c ' *)",
"Bash(MSYS_NO_PATHCONV=1 wsl.exe bash __TRACKED_VAR__/harness.sh __TRACKED_VAR__/apply-step.sh)",
"Bash(MSYS_NO_PATHCONV=1 wsl.exe bash __TRACKED_VAR__/harness-edge.sh __TRACKED_VAR__/apply-step.sh)"
],
"additionalDirectories": [
"\\tmp",
"C:\\Users\\beny314\\AppData\\Local\\Temp\\claude\\c--Source-ahk-github-automation\\f74052ba-9e93-4760-8fe5-7c53f23ddecb\\scratchpad"
]
},
"enabledPlugins": {
"frontend-design@claude-plugins-official": true,
"claude-md-management@claude-plugins-official": true,
"security-guidance@claude-plugins-official": true
}
}
Loading
Loading