mirror of https://github.com/go-gitea/gitea.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.5 KiB
68 lines
1.5 KiB
// Copyright 2025 The Gitea Authors. All rights reserved. |
|
// SPDX-License-Identifier: MIT |
|
|
|
package session |
|
|
|
import ( |
|
"bytes" |
|
"encoding/gob" |
|
"net/http" |
|
|
|
"gitea.com/go-chi/session" |
|
) |
|
|
|
type mockMemRawStore struct { |
|
s *session.MemStore |
|
} |
|
|
|
var _ session.RawStore = (*mockMemRawStore)(nil) |
|
|
|
func (m *mockMemRawStore) Set(k, v any) error { |
|
// We need to use gob to encode the value, to make it have the same behavior as other stores and catch abuses. |
|
// Because gob needs to "Register" the type before it can encode it, and it's unable to decode a struct to "any" so use a map to help to decode the value. |
|
var buf bytes.Buffer |
|
if err := gob.NewEncoder(&buf).Encode(map[string]any{"v": v}); err != nil { |
|
return err |
|
} |
|
return m.s.Set(k, buf.Bytes()) |
|
} |
|
|
|
func (m *mockMemRawStore) Get(k any) (ret any) { |
|
v, ok := m.s.Get(k).([]byte) |
|
if !ok { |
|
return nil |
|
} |
|
var w map[string]any |
|
_ = gob.NewDecoder(bytes.NewBuffer(v)).Decode(&w) |
|
return w["v"] |
|
} |
|
|
|
func (m *mockMemRawStore) Delete(k any) error { |
|
return m.s.Delete(k) |
|
} |
|
|
|
func (m *mockMemRawStore) ID() string { |
|
return m.s.ID() |
|
} |
|
|
|
func (m *mockMemRawStore) Release() error { |
|
return m.s.Release() |
|
} |
|
|
|
func (m *mockMemRawStore) Flush() error { |
|
return m.s.Flush() |
|
} |
|
|
|
type mockMemStore struct { |
|
*mockMemRawStore |
|
} |
|
|
|
var _ Store = (*mockMemStore)(nil) |
|
|
|
func (m mockMemStore) Destroy(writer http.ResponseWriter, request *http.Request) error { |
|
return nil |
|
} |
|
|
|
func NewMockMemStore(sid string) Store { |
|
return &mockMemStore{&mockMemRawStore{session.NewMemStore(sid)}} |
|
}
|
|
|