| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package handler
- import (
- "context"
- "io"
- "log/slog"
- "github.com/mk6i/retro-aim-server/server/oscar"
- "github.com/mk6i/retro-aim-server/server/oscar/middleware"
- "github.com/mk6i/retro-aim-server/state"
- "github.com/mk6i/retro-aim-server/wire"
- )
- func NewAdminHandler(logger *slog.Logger, adminService AdminService) AdminHandler {
- return AdminHandler{
- RouteLogger: middleware.RouteLogger{
- Logger: logger,
- },
- AdminService: adminService,
- }
- }
- type AdminHandler struct {
- AdminService
- OServiceService
- middleware.RouteLogger
- }
- type AdminService interface {
- ConfirmRequest(ctx context.Context, sess *state.Session, frame wire.SNACFrame) (wire.SNACMessage, error)
- InfoQuery(ctx context.Context, sess *state.Session, frame wire.SNACFrame, body wire.SNAC_0x07_0x02_AdminInfoQuery) (wire.SNACMessage, error)
- InfoChangeRequest(ctx context.Context, sess *state.Session, frame wire.SNACFrame, body wire.SNAC_0x07_0x04_AdminInfoChangeRequest) (wire.SNACMessage, error)
- }
- func (rt AdminHandler) ConfirmRequest(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, _ io.Reader, rw oscar.ResponseWriter) error {
- outSNAC, err := rt.AdminService.ConfirmRequest(ctx, sess, inFrame)
- if err != nil {
- return err
- }
- rt.LogRequestAndResponse(ctx, inFrame, nil, outSNAC.Frame, outSNAC.Body)
- return rw.SendSNAC(outSNAC.Frame, outSNAC.Body)
- }
- func (rt AdminHandler) InfoQuery(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, r io.Reader, rw oscar.ResponseWriter) error {
- inBody := wire.SNAC_0x07_0x02_AdminInfoQuery{}
- if err := wire.UnmarshalBE(&inBody, r); err != nil {
- return err
- }
- outSNAC, err := rt.AdminService.InfoQuery(ctx, sess, inFrame, inBody)
- if err != nil {
- return err
- }
- rt.LogRequestAndResponse(ctx, inFrame, nil, outSNAC.Frame, outSNAC.Body)
- return rw.SendSNAC(outSNAC.Frame, outSNAC.Body)
- }
- func (rt AdminHandler) InfoChangeRequest(ctx context.Context, sess *state.Session, inFrame wire.SNACFrame, r io.Reader, rw oscar.ResponseWriter) error {
- inBody := wire.SNAC_0x07_0x04_AdminInfoChangeRequest{}
- if err := wire.UnmarshalBE(&inBody, r); err != nil {
- return err
- }
- outSNAC, err := rt.AdminService.InfoChangeRequest(ctx, sess, inFrame, inBody)
- if err != nil {
- return err
- }
- rt.LogRequestAndResponse(ctx, inFrame, nil, outSNAC.Frame, outSNAC.Body)
- return rw.SendSNAC(outSNAC.Frame, outSNAC.Body)
- }
|