piotrkowalczuk/charon

View on GitHub
internal/mapping/refresh_token.go

Summary

Maintainability
A
40 mins
Test Coverage
package mapping

import (
    "github.com/golang/protobuf/ptypes"
    pbts "github.com/golang/protobuf/ptypes/timestamp"
    charonrpc "github.com/piotrkowalczuk/charon/pb/rpc/charond/v1"
    "github.com/piotrkowalczuk/charon/internal/model"
    "github.com/piotrkowalczuk/ntypes"
)

func ReverseRefreshToken(ent *model.RefreshTokenEntity) (*charonrpc.RefreshToken, error) {
    var (
        err                                        error
        expireAt, lastUsedAt, createdAt, updatedAt *pbts.Timestamp
    )

    if createdAt, err = ptypes.TimestampProto(ent.CreatedAt); err != nil {
        return nil, err
    }
    if ent.UpdatedAt.Valid {
        if updatedAt, err = ptypes.TimestampProto(ent.UpdatedAt.Time); err != nil {
            return nil, err
        }
    }
    if ent.ExpireAt.Valid {
        if expireAt, err = ptypes.TimestampProto(ent.ExpireAt.Time); err != nil {
            return nil, err
        }
    }
    if ent.LastUsedAt.Valid {
        if lastUsedAt, err = ptypes.TimestampProto(ent.LastUsedAt.Time); err != nil {
            return nil, err
        }
    }

    return &charonrpc.RefreshToken{
        Token:      ent.Token,
        Notes:      &ent.Notes,
        Revoked:    ent.Revoked,
        ExpireAt:   expireAt,
        LastUsedAt: lastUsedAt,
        UserId:     ent.UserID,
        CreatedAt:  createdAt,
        CreatedBy:  &ent.CreatedBy,
        UpdatedAt:  updatedAt,
        UpdatedBy:  &ent.UpdatedBy,
    }, nil
}

func ReverseRefreshTokens(in []*model.RefreshTokenEntity) ([]*charonrpc.RefreshToken, error) {
    res := make([]*charonrpc.RefreshToken, 0, len(in))
    for _, ent := range in {
        msg, err := ReverseRefreshToken(ent)
        if err != nil {
            return nil, err
        }
        res = append(res, msg)
    }

    return res, nil
}

func RefreshTokenQuery(q *charonrpc.RefreshTokenQuery) *model.RefreshTokenCriteria {
    var revoked ntypes.Bool
    if q.GetRevoked() != nil {
        revoked = *q.GetRevoked()
    }

    return &model.RefreshTokenCriteria{
        UserID:     q.GetUserId(),
        Notes:      q.GetNotes(),
        Revoked:    revoked, // TODO: pointer?
        ExpireAt:   q.GetExpireAt(),
        LastUsedAt: q.GetLastUsedAt(),
        CreatedAt:  q.GetCreatedAt(),
        UpdatedAt:  q.GetUpdatedAt(),
    }
}