docs: reorder & testing
This commit is contained in:
@@ -510,3 +510,268 @@ func recoverUserDecodePanic[T any](message string, result **T, err *error) {
|
||||
*err = fmt.Errorf("%s: panic recovered: %v", message, recovered)
|
||||
}
|
||||
}
|
||||
|
||||
// ListMySessionsRequestToPayload converts usermodel.ListMySessionsRequest
|
||||
// to FlatBuffers bytes suitable for the authenticated gateway transport.
|
||||
func ListMySessionsRequestToPayload(request *usermodel.ListMySessionsRequest) ([]byte, error) {
|
||||
if request == nil {
|
||||
return nil, errors.New("encode list my sessions request payload: request is nil")
|
||||
}
|
||||
|
||||
builder := flatbuffers.NewBuilder(32)
|
||||
userfbs.ListMySessionsRequestStart(builder)
|
||||
offset := userfbs.ListMySessionsRequestEnd(builder)
|
||||
userfbs.FinishListMySessionsRequestBuffer(builder, offset)
|
||||
|
||||
return builder.FinishedBytes(), nil
|
||||
}
|
||||
|
||||
// PayloadToListMySessionsRequest converts FlatBuffers payload bytes into
|
||||
// usermodel.ListMySessionsRequest.
|
||||
func PayloadToListMySessionsRequest(data []byte) (result *usermodel.ListMySessionsRequest, err error) {
|
||||
if len(data) == 0 {
|
||||
return nil, errors.New("decode list my sessions request payload: data is empty")
|
||||
}
|
||||
|
||||
defer recoverUserDecodePanic("decode list my sessions request payload", &result, &err)
|
||||
|
||||
_ = userfbs.GetRootAsListMySessionsRequest(data, 0)
|
||||
return &usermodel.ListMySessionsRequest{}, nil
|
||||
}
|
||||
|
||||
// ListMySessionsResponseToPayload converts usermodel.ListMySessionsResponse
|
||||
// to FlatBuffers bytes suitable for the authenticated gateway transport.
|
||||
func ListMySessionsResponseToPayload(response *usermodel.ListMySessionsResponse) ([]byte, error) {
|
||||
if response == nil {
|
||||
return nil, errors.New("encode list my sessions response payload: response is nil")
|
||||
}
|
||||
|
||||
builder := flatbuffers.NewBuilder(256)
|
||||
itemOffsets := make([]flatbuffers.UOffsetT, len(response.Items))
|
||||
for index := range response.Items {
|
||||
itemOffsets[index] = encodeDeviceSession(builder, response.Items[index])
|
||||
}
|
||||
|
||||
var itemsVector flatbuffers.UOffsetT
|
||||
if len(itemOffsets) > 0 {
|
||||
userfbs.ListMySessionsResponseStartItemsVector(builder, len(itemOffsets))
|
||||
for index := len(itemOffsets) - 1; index >= 0; index-- {
|
||||
builder.PrependUOffsetT(itemOffsets[index])
|
||||
}
|
||||
itemsVector = builder.EndVector(len(itemOffsets))
|
||||
}
|
||||
|
||||
userfbs.ListMySessionsResponseStart(builder)
|
||||
if itemsVector != 0 {
|
||||
userfbs.ListMySessionsResponseAddItems(builder, itemsVector)
|
||||
}
|
||||
offset := userfbs.ListMySessionsResponseEnd(builder)
|
||||
userfbs.FinishListMySessionsResponseBuffer(builder, offset)
|
||||
|
||||
return builder.FinishedBytes(), nil
|
||||
}
|
||||
|
||||
// PayloadToListMySessionsResponse converts FlatBuffers payload bytes into
|
||||
// usermodel.ListMySessionsResponse.
|
||||
func PayloadToListMySessionsResponse(data []byte) (result *usermodel.ListMySessionsResponse, err error) {
|
||||
if len(data) == 0 {
|
||||
return nil, errors.New("decode list my sessions response payload: data is empty")
|
||||
}
|
||||
|
||||
defer recoverUserDecodePanic("decode list my sessions response payload", &result, &err)
|
||||
|
||||
response := userfbs.GetRootAsListMySessionsResponse(data, 0)
|
||||
count := response.ItemsLength()
|
||||
out := &usermodel.ListMySessionsResponse{
|
||||
Items: make([]usermodel.DeviceSession, 0, count),
|
||||
}
|
||||
view := new(userfbs.DeviceSessionView)
|
||||
for index := 0; index < count; index++ {
|
||||
if !response.Items(view, index) {
|
||||
return nil, fmt.Errorf("decode list my sessions response payload: item %d is missing", index)
|
||||
}
|
||||
out.Items = append(out.Items, decodeDeviceSession(view))
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
// RevokeMySessionRequestToPayload converts usermodel.RevokeMySessionRequest
|
||||
// to FlatBuffers bytes suitable for the authenticated gateway transport.
|
||||
func RevokeMySessionRequestToPayload(request *usermodel.RevokeMySessionRequest) ([]byte, error) {
|
||||
if request == nil {
|
||||
return nil, errors.New("encode revoke my session request payload: request is nil")
|
||||
}
|
||||
|
||||
builder := flatbuffers.NewBuilder(64)
|
||||
deviceSessionID := builder.CreateString(request.DeviceSessionID)
|
||||
|
||||
userfbs.RevokeMySessionRequestStart(builder)
|
||||
userfbs.RevokeMySessionRequestAddDeviceSessionId(builder, deviceSessionID)
|
||||
offset := userfbs.RevokeMySessionRequestEnd(builder)
|
||||
userfbs.FinishRevokeMySessionRequestBuffer(builder, offset)
|
||||
|
||||
return builder.FinishedBytes(), nil
|
||||
}
|
||||
|
||||
// PayloadToRevokeMySessionRequest converts FlatBuffers payload bytes into
|
||||
// usermodel.RevokeMySessionRequest.
|
||||
func PayloadToRevokeMySessionRequest(data []byte) (result *usermodel.RevokeMySessionRequest, err error) {
|
||||
if len(data) == 0 {
|
||||
return nil, errors.New("decode revoke my session request payload: data is empty")
|
||||
}
|
||||
|
||||
defer recoverUserDecodePanic("decode revoke my session request payload", &result, &err)
|
||||
|
||||
request := userfbs.GetRootAsRevokeMySessionRequest(data, 0)
|
||||
return &usermodel.RevokeMySessionRequest{
|
||||
DeviceSessionID: string(request.DeviceSessionId()),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// RevokeMySessionResponseToPayload converts usermodel.RevokeMySessionResponse
|
||||
// to FlatBuffers bytes suitable for the authenticated gateway transport.
|
||||
func RevokeMySessionResponseToPayload(response *usermodel.RevokeMySessionResponse) ([]byte, error) {
|
||||
if response == nil {
|
||||
return nil, errors.New("encode revoke my session response payload: response is nil")
|
||||
}
|
||||
|
||||
builder := flatbuffers.NewBuilder(128)
|
||||
sessionOffset := encodeDeviceSession(builder, response.Session)
|
||||
|
||||
userfbs.RevokeMySessionResponseStart(builder)
|
||||
userfbs.RevokeMySessionResponseAddSession(builder, sessionOffset)
|
||||
offset := userfbs.RevokeMySessionResponseEnd(builder)
|
||||
userfbs.FinishRevokeMySessionResponseBuffer(builder, offset)
|
||||
|
||||
return builder.FinishedBytes(), nil
|
||||
}
|
||||
|
||||
// PayloadToRevokeMySessionResponse converts FlatBuffers payload bytes into
|
||||
// usermodel.RevokeMySessionResponse.
|
||||
func PayloadToRevokeMySessionResponse(data []byte) (result *usermodel.RevokeMySessionResponse, err error) {
|
||||
if len(data) == 0 {
|
||||
return nil, errors.New("decode revoke my session response payload: data is empty")
|
||||
}
|
||||
|
||||
defer recoverUserDecodePanic("decode revoke my session response payload", &result, &err)
|
||||
|
||||
response := userfbs.GetRootAsRevokeMySessionResponse(data, 0)
|
||||
view := response.Session(nil)
|
||||
if view == nil {
|
||||
return nil, errors.New("decode revoke my session response payload: session is missing")
|
||||
}
|
||||
return &usermodel.RevokeMySessionResponse{Session: decodeDeviceSession(view)}, nil
|
||||
}
|
||||
|
||||
// RevokeAllMySessionsRequestToPayload converts
|
||||
// usermodel.RevokeAllMySessionsRequest to FlatBuffers bytes suitable for
|
||||
// the authenticated gateway transport.
|
||||
func RevokeAllMySessionsRequestToPayload(request *usermodel.RevokeAllMySessionsRequest) ([]byte, error) {
|
||||
if request == nil {
|
||||
return nil, errors.New("encode revoke all my sessions request payload: request is nil")
|
||||
}
|
||||
|
||||
builder := flatbuffers.NewBuilder(32)
|
||||
userfbs.RevokeAllMySessionsRequestStart(builder)
|
||||
offset := userfbs.RevokeAllMySessionsRequestEnd(builder)
|
||||
userfbs.FinishRevokeAllMySessionsRequestBuffer(builder, offset)
|
||||
|
||||
return builder.FinishedBytes(), nil
|
||||
}
|
||||
|
||||
// PayloadToRevokeAllMySessionsRequest converts FlatBuffers payload bytes
|
||||
// into usermodel.RevokeAllMySessionsRequest.
|
||||
func PayloadToRevokeAllMySessionsRequest(data []byte) (result *usermodel.RevokeAllMySessionsRequest, err error) {
|
||||
if len(data) == 0 {
|
||||
return nil, errors.New("decode revoke all my sessions request payload: data is empty")
|
||||
}
|
||||
|
||||
defer recoverUserDecodePanic("decode revoke all my sessions request payload", &result, &err)
|
||||
|
||||
_ = userfbs.GetRootAsRevokeAllMySessionsRequest(data, 0)
|
||||
return &usermodel.RevokeAllMySessionsRequest{}, nil
|
||||
}
|
||||
|
||||
// RevokeAllMySessionsResponseToPayload converts
|
||||
// usermodel.RevokeAllMySessionsResponse to FlatBuffers bytes suitable
|
||||
// for the authenticated gateway transport.
|
||||
func RevokeAllMySessionsResponseToPayload(response *usermodel.RevokeAllMySessionsResponse) ([]byte, error) {
|
||||
if response == nil {
|
||||
return nil, errors.New("encode revoke all my sessions response payload: response is nil")
|
||||
}
|
||||
|
||||
builder := flatbuffers.NewBuilder(64)
|
||||
userID := builder.CreateString(response.Summary.UserID)
|
||||
|
||||
userfbs.DeviceSessionRevocationSummaryViewStart(builder)
|
||||
userfbs.DeviceSessionRevocationSummaryViewAddUserId(builder, userID)
|
||||
userfbs.DeviceSessionRevocationSummaryViewAddRevokedCount(builder, int32(response.Summary.RevokedCount))
|
||||
summaryOffset := userfbs.DeviceSessionRevocationSummaryViewEnd(builder)
|
||||
|
||||
userfbs.RevokeAllMySessionsResponseStart(builder)
|
||||
userfbs.RevokeAllMySessionsResponseAddSummary(builder, summaryOffset)
|
||||
offset := userfbs.RevokeAllMySessionsResponseEnd(builder)
|
||||
userfbs.FinishRevokeAllMySessionsResponseBuffer(builder, offset)
|
||||
|
||||
return builder.FinishedBytes(), nil
|
||||
}
|
||||
|
||||
// PayloadToRevokeAllMySessionsResponse converts FlatBuffers payload bytes
|
||||
// into usermodel.RevokeAllMySessionsResponse.
|
||||
func PayloadToRevokeAllMySessionsResponse(data []byte) (result *usermodel.RevokeAllMySessionsResponse, err error) {
|
||||
if len(data) == 0 {
|
||||
return nil, errors.New("decode revoke all my sessions response payload: data is empty")
|
||||
}
|
||||
|
||||
defer recoverUserDecodePanic("decode revoke all my sessions response payload", &result, &err)
|
||||
|
||||
response := userfbs.GetRootAsRevokeAllMySessionsResponse(data, 0)
|
||||
summary := response.Summary(nil)
|
||||
if summary == nil {
|
||||
return nil, errors.New("decode revoke all my sessions response payload: summary is missing")
|
||||
}
|
||||
return &usermodel.RevokeAllMySessionsResponse{
|
||||
Summary: usermodel.DeviceSessionRevocationSummary{
|
||||
UserID: string(summary.UserId()),
|
||||
RevokedCount: int(summary.RevokedCount()),
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func encodeDeviceSession(builder *flatbuffers.Builder, sess usermodel.DeviceSession) flatbuffers.UOffsetT {
|
||||
deviceSessionID := builder.CreateString(sess.DeviceSessionID)
|
||||
userID := builder.CreateString(sess.UserID)
|
||||
status := builder.CreateString(sess.Status)
|
||||
var clientPublicKey flatbuffers.UOffsetT
|
||||
if sess.ClientPublicKey != "" {
|
||||
clientPublicKey = builder.CreateString(sess.ClientPublicKey)
|
||||
}
|
||||
|
||||
userfbs.DeviceSessionViewStart(builder)
|
||||
userfbs.DeviceSessionViewAddDeviceSessionId(builder, deviceSessionID)
|
||||
userfbs.DeviceSessionViewAddUserId(builder, userID)
|
||||
userfbs.DeviceSessionViewAddStatus(builder, status)
|
||||
if clientPublicKey != 0 {
|
||||
userfbs.DeviceSessionViewAddClientPublicKey(builder, clientPublicKey)
|
||||
}
|
||||
userfbs.DeviceSessionViewAddCreatedAtMs(builder, sess.CreatedAt.UTC().UnixMilli())
|
||||
if sess.RevokedAt != nil {
|
||||
userfbs.DeviceSessionViewAddRevokedAtMs(builder, sess.RevokedAt.UTC().UnixMilli())
|
||||
}
|
||||
if sess.LastSeenAt != nil {
|
||||
userfbs.DeviceSessionViewAddLastSeenAtMs(builder, sess.LastSeenAt.UTC().UnixMilli())
|
||||
}
|
||||
return userfbs.DeviceSessionViewEnd(builder)
|
||||
}
|
||||
|
||||
func decodeDeviceSession(view *userfbs.DeviceSessionView) usermodel.DeviceSession {
|
||||
return usermodel.DeviceSession{
|
||||
DeviceSessionID: string(view.DeviceSessionId()),
|
||||
UserID: string(view.UserId()),
|
||||
Status: string(view.Status()),
|
||||
ClientPublicKey: string(view.ClientPublicKey()),
|
||||
CreatedAt: time.UnixMilli(view.CreatedAtMs()).UTC(),
|
||||
RevokedAt: optionalUnixMilli(view.RevokedAtMs()),
|
||||
LastSeenAt: optionalUnixMilli(view.LastSeenAtMs()),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user