feat(console,api): implement /console Admin Dashboard and Go backend full CRUD REST APIs

- Add comprehensive /console admin web UI for managing research projects, areas, members, publications, patents, lectures, and standards
- Implement Admin token authentication middleware (RequireAdminToken) with Bearer token validation
- Implement POST, PUT, DELETE REST API endpoints for all database entities across 5 domains
- Add typed admin API client in refer_landing_page/lib/adminApi.ts with localStorage session persistence
- Enhance E2E test runner to manage backend server lifecycle during automated tests
- Pass all 12 quality gates cleanly with unanimous reviewer PASS verdicts
This commit is contained in:
2026-08-24 22:21:12 +09:00
parent dadd14feb1
commit 3f452468d6
32 changed files with 5466 additions and 279 deletions
+34
View File
@@ -0,0 +1,34 @@
package httpx
import (
"strings"
"github.com/gin-gonic/gin"
)
// RequireAdminToken returns a Gin middleware that validates Bearer <token> against the configured admin token.
func RequireAdminToken(adminToken string) gin.HandlerFunc {
return func(c *gin.Context) {
if adminToken == "" {
Unauthorized(c, "Admin API is disabled: ADMIN_TOKEN is not configured")
c.Abort()
return
}
auth := c.GetHeader("Authorization")
if auth == "" {
Unauthorized(c, "Missing Authorization header")
c.Abort()
return
}
parts := strings.SplitN(auth, " ", 2)
if len(parts) != 2 || !strings.EqualFold(parts[0], "Bearer") || parts[1] != adminToken {
Unauthorized(c, "Invalid admin bearer token")
c.Abort()
return
}
c.Next()
}
}
+14
View File
@@ -32,6 +32,20 @@ func Error(c *gin.Context, status int, msg string) {
})
}
func Created(c *gin.Context, data any) {
c.JSON(http.StatusCreated, SuccessResponse{
Data: data,
})
}
func NoContent(c *gin.Context) {
c.Status(http.StatusNoContent)
}
func Unauthorized(c *gin.Context, msg string) {
Error(c, http.StatusUnauthorized, msg)
}
func BadRequest(c *gin.Context, msg string) {
Error(c, http.StatusBadRequest, msg)
}