- Add session.Attach to reuse per-request sessions across middleware and ghome handlers - Make Session finalize/abort paths idempotent to avoid duplicate commit or rollback work - Move request_data parsing helper to internal/utils - Expand ParseRequestData usage across api, download, unit, live, multiunit, and subscenario handlers - Extract download package metadata into internal/handler/download/types.go - Return explicit errors from selected session lookup helpers and update callers - Make api action handlers return errors directly instead of calling ss.CheckErr in nested layers Signed-off-by: Sean Du <do4suki@gmail.com>
56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package session
|
|
|
|
import (
|
|
"errors"
|
|
ghomemodel "honoka-chan/internal/model/ghome"
|
|
)
|
|
|
|
func (ss *Session) GetDeviceID() string {
|
|
return ss.deviceID
|
|
}
|
|
|
|
func (ss *Session) GetRandKey() ([]byte, error) {
|
|
deviceKey := ghomemodel.DeviceKey{}
|
|
has, err := ss.UserEng.Table(new(ghomemodel.DeviceKey)).
|
|
Where("device_id = ?", ss.GetDeviceID()).Get(&deviceKey)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if !has {
|
|
return nil, nil
|
|
}
|
|
|
|
return []byte(deviceKey.RandKey), nil
|
|
}
|
|
func (ss *Session) SetRandKey(key string) {
|
|
var err error
|
|
randKey, err := ss.GetRandKey()
|
|
if ss.CheckErr(err) {
|
|
return
|
|
}
|
|
if randKey == nil {
|
|
_, err = ss.UserEng.Insert(&ghomemodel.DeviceKey{
|
|
DeviceID: ss.GetDeviceID(),
|
|
RandKey: key,
|
|
})
|
|
} else {
|
|
_, err = ss.UserEng.Table(new(ghomemodel.DeviceKey)).
|
|
Where("device_id = ?", ss.GetDeviceID()).Update(&ghomemodel.DeviceKey{RandKey: key})
|
|
}
|
|
if ss.CheckErr(err) {
|
|
return
|
|
}
|
|
}
|
|
|
|
func (ss *Session) Get3DESRandKey() ([]byte, error) {
|
|
randKey, err := ss.GetRandKey()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if len(randKey) < 24 {
|
|
return nil, errors.New("invalid rand key")
|
|
}
|
|
return randKey[:24], nil
|
|
}
|