| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 2026-02-20 | feat(admin): integrate asynqmon web UI for task queue monitoring | nsfisis | |
| Mount asynqmon HTTP handler under admin/queue with existing session cookie and admin middleware authentication. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | |||
| 2026-02-20 | feat(auth): add structured logging for login success and failure | nsfisis | |
| Add ClientIPMiddleware to extract client IP into context.Context, enabling structured log output with username, IP, and failure reason for login attempts. Change failed login log level from Error to Warn as authentication failures are expected events. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | |||
| 2026-02-20 | feat(admin): add rejudge functionality for submissions | nsfisis | |
| Allow administrators to re-execute test cases for a specific submission from the submission detail page. This is useful after testcase fixes or worker issues. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | |||
| 2026-02-15 | refactor(backend): introduce DI interfaces for testability | nsfisis | |
| Replace concrete *db.Queries and *pgxpool.Pool dependencies with db.Querier and db.TxManager interfaces across all handlers, game hub, and auth. This enables unit testing with mocks. - Enable sqlc emit_interface to generate Querier interface - Add TxManager abstraction to encapsulate transactions - Convert auth package-level functions to Authenticator struct - Add TaskQueueInterface/TaskWorkerInterface for game.Hub - Add initial unit tests for game logic and API handlers Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | |||
| 2026-02-15 | fix(backend): resolve TODO items for transactions, validation, and error ↵ | nsfisis | |
| handling - Wrap multi-step DB operations in transactions (signup, submit, game edit, task result processing) - Add game running checks to PostGamePlayCode and PostGamePlaySubmit - Hide ranking code when game is not yet finished - Replace silenced errors in processTaskResults with slog.Error logging - Add pgxpool.Pool to Handler/Hub structs for transaction support Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | |||
| 2026-02-15 | refactor(log): migrate from log to log/slog for structured logging | nsfisis | |
| Replace all usages of the standard log package with log/slog across backend and swift worker. Configure Echo's request logger to emit structured log attributes via slog instead of the default format. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | |||
| 2026-02-15 | refactor(auth): replace JWT authentication with server-side sessions | nsfisis | |
| Migrate from stateless JWT tokens to server-side session management backed by PostgreSQL. Sessions are hashed with SHA-256 before storage, cleaned up periodically, and invalidated on logout. This removes the need for JWT_SECRET/COOKIE_SECRET environment variables and the golang-jwt dependency. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | |||
| 2026-02-14 | feat(backend): update dependencies | nsfisis | |
| 2026-02-13 | feat(auth): store JWT in HTTP-only cookie instead of JS-accessible cookie | nsfisis | |
| Prevent XSS-based token theft by making the JWT inaccessible to JavaScript. The backend now sets/clears the cookie via Set-Cookie headers, and the frontend retrieves user info from /api/me instead of decoding the JWT directly. - Add JWTCookieMiddleware to parse cookie and inject claims into context - Add /me and /logout endpoints to OpenAPI spec and handlers - Update PostLogin to return user object + Set-Cookie header - Replace Authorization header auth with cookie-based auth throughout - Rewrite frontend auth to use /api/me instead of jwt-decode - Remove jwt-decode dependency - Configure CORS with credentials for local dev Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | |||
| 2026-02-13 | feat(auth): add login rate limiting per IP | nsfisis | |
| Prevent brute-force attacks by limiting POST /login to 5 requests per minute per IP address using golang.org/x/time/rate. Unused entries are cleaned up after 10 minutes of inactivity. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> | |||
| 2026-02-13 | refactor: rename module/package name | nsfisis | |
| 2025-08-17 | feat: update "PHPerKaigi" to "iOSDC Japan" | nsfisis | |
| 2025-08-14 | feat(backend,frontend): Replace hard-coded base path with environment variable | nsfisis | |
| 2025-03-17 | refactor(backend): remove unused field | nsfisis | |
| 2025-03-11 | refactor(backend): remove unnecessary comments | nsfisis | |
| 2025-03-08 | websocket to polling | nsfisis | |
| 2025-03-04 | change base path | nsfisis | |
| 2025-03-04 | update go package names | nsfisis | |
| 2024-08-18 | feat(backend): do not define local-only routes in prod env | nsfisis | |
| 2024-08-18 | feat(backend): forward all unknown requests to app server in local env | nsfisis | |
| 2024-08-17 | feat(backend): fetch user icon from fortee | nsfisis | |
| 2024-08-10 | fix(backend): fix base path of login/logout pages on local env | nsfisis | |
| 2024-08-10 | feat: prepend base path | nsfisis | |
| 2024-08-08 | feat(backend/worker): enable `revive` in `golangci-lint` | nsfisis | |
| 2024-08-08 | feat(backend/worker): enable `stylecheck` in `golangci-lint` | nsfisis | |
| 2024-08-08 | feat(backend/woerker): enable `errcheck` in `golangci-lint` | nsfisis | |
| 2024-08-08 | refactor(backend): move ownership of channel to send task results | nsfisis | |
| 2024-08-05 | feat: show execution result in play page | nsfisis | |
| 2024-08-05 | feat(backend): implement task queue processor | nsfisis | |
| 2024-08-05 | feat: implement task queue | nsfisis | |
| 2024-08-04 | feat: authenticate users in admin pages | nsfisis | |
| 2024-08-04 | feat(backend): add /logout to /admin/dashboard | nsfisis | |
| 2024-08-04 | feat(backend): serve /admin/* pages from api-server | nsfisis | |
| 2024-08-01 | refactor(backend): `Id` to `ID` in echo path params | nsfisis | |
| 2024-08-01 | refactor(backend): wrap ApiHandler with user authentication | nsfisis | |
| 2024-08-01 | feat: change procedure of game starting | nsfisis | |
| 2024-07-31 | feat: "iOSDC 2024" to "iOSDC Japan 2024" | nsfisis | |
| 2024-07-29 | feat(backend): partially implement gaming | nsfisis | |
| 2024-07-29 | feat(backend): use connection pool | nsfisis | |
| 2024-07-28 | refactor(backend): move game-related code to game module | nsfisis | |
| 2024-07-28 | refactor(backend): move config-related code to config.go | nsfisis | |
| 2024-07-28 | chore(backend): rename root module | nsfisis | |
| 2024-07-28 | refactor: remove /api/ prefix from openapi.yaml | nsfisis | |
| 2024-07-28 | feat(backend): user Logger and Recover middleware | nsfisis | |
| 2024-07-28 | feat(backend): handle JWT validation manually | nsfisis | |
| 2024-07-28 | backend: openapi | nsfisis | |
| 2024-07-27 | backend: jwt | nsfisis | |
| 2024-07-27 | organize dockerfiles and compose.yaml | nsfisis | |
| 2024-07-22 | backend: replace raw net/http with echo | nsfisis | |
| 2024-07-22 | change go module name | nsfisis | |
