refactor:
This commit is contained in:
parent
ad8d145986
commit
3c0f01630f
29 changed files with 360 additions and 1377 deletions
|
@ -1,11 +0,0 @@
|
|||
package transport
|
||||
|
||||
import (
|
||||
"context"
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
emailv1 "ms-auth/pkg/go/gen/email/v1"
|
||||
)
|
||||
|
||||
func (s *AuthServer) SendEmail(ctx context.Context, req *emailv1.SendEmailRequest) (*emptypb.Empty, error) {
|
||||
panic("not implemented")
|
||||
}
|
|
@ -1 +1,25 @@
|
|||
package transport
|
||||
|
||||
import (
|
||||
"context"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
type ReqWithToken interface {
|
||||
GetToken() string
|
||||
}
|
||||
|
||||
func (s *TesterServer) AuthInterceptor() grpc.UnaryServerInterceptor {
|
||||
return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) {
|
||||
reqWithToken, ok := req.(ReqWithToken)
|
||||
if !ok {
|
||||
return nil, status.Errorf(codes.Unknown, "") // FIXME
|
||||
}
|
||||
|
||||
token := reqWithToken.GetToken()
|
||||
|
||||
return handler(ctx, req)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,93 +2,40 @@ package transport
|
|||
|
||||
import (
|
||||
"context"
|
||||
"git.sch9.ru/new_gate/ms-tester/internal/models"
|
||||
testerv1 "git.sch9.ru/new_gate/ms-tester/pkg/go/gen/tester/v1"
|
||||
"go.uber.org/zap"
|
||||
"google.golang.org/protobuf/types/known/timestamppb"
|
||||
"ms-auth/internal/storage"
|
||||
emailv1 "ms-auth/pkg/go/gen/email/v1"
|
||||
sessionv1 "ms-auth/pkg/go/gen/session/v1"
|
||||
userv1 "ms-auth/pkg/go/gen/user/v1"
|
||||
"net"
|
||||
"time"
|
||||
|
||||
"google.golang.org/grpc"
|
||||
)
|
||||
|
||||
type SessionServiceI interface {
|
||||
Create(ctx context.Context, handle, password string) (*string, error)
|
||||
Read(ctx context.Context, token string) (*int32, error)
|
||||
Update(ctx context.Context, token string) error
|
||||
Delete(ctx context.Context, token string) error
|
||||
type ProblemService interface {
|
||||
CreateProblem(ctx context.Context, problem *models.Problem) (int32, error)
|
||||
ReadProblem(ctx context.Context, id int32) (*models.Problem, error)
|
||||
UpdateProblem(ctx context.Context, problem *models.Problem) error
|
||||
DeleteProblem(ctx context.Context, id int32) error
|
||||
}
|
||||
|
||||
type UserServiceI interface {
|
||||
CreateUser(ctx context.Context, token, username, password string, email *string, expiresAt *time.Time, role *int32) (*int32, error)
|
||||
ReadUser(ctx context.Context, token string, id int32) (*storage.User, error)
|
||||
UpdateUser(ctx context.Context, token string, id int32, username *string, password *string, email *string, expiresAt *time.Time, role *int32) error
|
||||
DeleteUser(ctx context.Context, token string, id int32) error
|
||||
}
|
||||
|
||||
type AuthServer struct {
|
||||
emailv1.UnimplementedEmailServiceServer
|
||||
|
||||
sessionv1.UnimplementedSessionServiceServer
|
||||
sessionService SessionServiceI
|
||||
|
||||
userv1.UnimplementedUserServiceServer
|
||||
userService UserServiceI
|
||||
type TesterServer struct {
|
||||
testerv1.UnimplementedTesterServiceServer
|
||||
problemService ProblemService
|
||||
|
||||
gRPCServer *grpc.Server
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// NewAuthServer creates a new instance of the AuthServer struct.
|
||||
//
|
||||
// Parameters:
|
||||
// - sessionService: A pointer to the SessionServiceI interface.
|
||||
// - gRPCServer: A pointer to the grpc.Server struct.
|
||||
// - logger: A pointer to the zap.Logger struct.
|
||||
//
|
||||
// Returns:
|
||||
// - *AuthServer: A pointer to the AuthServer struct.
|
||||
func NewAuthServer(sessionService SessionServiceI, userService UserServiceI, gRPCServer *grpc.Server, logger *zap.Logger) *AuthServer {
|
||||
return &AuthServer{
|
||||
sessionService: sessionService,
|
||||
userService: userService,
|
||||
func NewTesterServer(problemService ProblemService, gRPCServer *grpc.Server, logger *zap.Logger) *TesterServer {
|
||||
server := &TesterServer{
|
||||
problemService: problemService,
|
||||
gRPCServer: gRPCServer,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
// Start starts the AuthServer and listens on port :8090.
|
||||
//
|
||||
// It creates a listener on the specified address and starts serving incoming requests.
|
||||
// It also logs the server start and any errors that occur during serving.
|
||||
//
|
||||
// No parameters.
|
||||
// No return values.
|
||||
func (s *AuthServer) Start() {
|
||||
lis, err := net.Listen("tcp", ":8090")
|
||||
if err != nil {
|
||||
s.logger.Fatal("")
|
||||
}
|
||||
testerv1.RegisterTesterServiceServer(gRPCServer, server)
|
||||
|
||||
sessionv1.RegisterSessionServiceServer(s.gRPCServer, s)
|
||||
go func() {
|
||||
s.logger.Info("Listening on :8090")
|
||||
if err := s.gRPCServer.Serve(lis); err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
}()
|
||||
s.logger.Info("server started")
|
||||
}
|
||||
|
||||
// GracefullyStop stops the server gracefully.
|
||||
//
|
||||
// No parameters.
|
||||
// No return values.
|
||||
func (s *AuthServer) GracefullyStop() {
|
||||
s.gRPCServer.GracefulStop()
|
||||
s.logger.Info("server stopped")
|
||||
return server
|
||||
}
|
||||
|
||||
func AsTimeP(t *timestamppb.Timestamp) *time.Time {
|
||||
|
@ -99,25 +46,9 @@ func AsTimeP(t *timestamppb.Timestamp) *time.Time {
|
|||
return &tt
|
||||
}
|
||||
|
||||
func AsInt32P(v *userv1.Role) *int32 {
|
||||
if v == nil {
|
||||
return nil
|
||||
}
|
||||
vv := int32(v.Number())
|
||||
return &vv
|
||||
}
|
||||
|
||||
func AsTimestampP(t *time.Time) *timestamppb.Timestamp {
|
||||
if t == nil {
|
||||
return nil
|
||||
}
|
||||
return timestamppb.New(*t)
|
||||
}
|
||||
|
||||
func AsRoleP(r *int32) *userv1.Role {
|
||||
if r == nil {
|
||||
return nil
|
||||
}
|
||||
rr := userv1.Role(*r)
|
||||
return &rr
|
||||
}
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
package transport
|
||||
|
||||
import (
|
||||
"context"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
sessionv1 "ms-auth/pkg/go/gen/session/v1"
|
||||
)
|
||||
|
||||
func (s *AuthServer) Create(ctx context.Context, req *sessionv1.CreateSessionRequest) (*sessionv1.CreateSessionResponse, error) {
|
||||
token, err := s.sessionService.Create(ctx, req.GetHandle(), req.GetPassword())
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
return &sessionv1.CreateSessionResponse{
|
||||
Token: *token,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *AuthServer) Read(ctx context.Context, req *sessionv1.ReadSessionRequest) (*sessionv1.ReadSessionResponse, error) {
|
||||
id, err := s.sessionService.Read(ctx, req.GetToken())
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
return &sessionv1.ReadSessionResponse{
|
||||
UserId: *id,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *AuthServer) Update(ctx context.Context, req *sessionv1.UpdateSessionRequest) (*emptypb.Empty, error) {
|
||||
err := s.sessionService.Update(ctx, req.GetToken())
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
return &emptypb.Empty{}, nil
|
||||
}
|
||||
|
||||
func (s *AuthServer) Delete(ctx context.Context, req *sessionv1.DeleteSessionRequest) (*emptypb.Empty, error) {
|
||||
err := s.sessionService.Delete(ctx, req.GetToken())
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
return &emptypb.Empty{}, nil
|
||||
}
|
82
internal/transport/tester.go
Normal file
82
internal/transport/tester.go
Normal file
|
@ -0,0 +1,82 @@
|
|||
package transport
|
||||
|
||||
import (
|
||||
"context"
|
||||
"git.sch9.ru/new_gate/ms-tester/internal/lib"
|
||||
"git.sch9.ru/new_gate/ms-tester/internal/models"
|
||||
testerv1 "git.sch9.ru/new_gate/ms-tester/pkg/go/gen/tester/v1"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
)
|
||||
|
||||
func (s *TesterServer) CreateProblem(ctx context.Context, req *testerv1.CreateProblemRequest) (*testerv1.CreateProblemResponse, error) {
|
||||
problem := req.GetProblem()
|
||||
if problem == nil {
|
||||
return nil, status.Errorf(codes.Unknown, "") // FIXME
|
||||
}
|
||||
id, err := s.problemService.CreateProblem(
|
||||
ctx,
|
||||
&models.Problem{
|
||||
Name: lib.AsStringP(problem.Name),
|
||||
Description: lib.AsStringP(problem.Description),
|
||||
TimeLimit: lib.AsInt32P(problem.TimeLimit),
|
||||
MemoryLimit: lib.AsInt32P(problem.MemoryLimit),
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
|
||||
return &testerv1.CreateProblemResponse{
|
||||
Id: id,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TesterServer) ReadProblem(ctx context.Context, req *testerv1.ReadProblemRequest) (*testerv1.ReadProblemResponse, error) {
|
||||
problem, err := s.problemService.ReadProblem(ctx, req.GetId())
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
return &testerv1.ReadProblemResponse{
|
||||
Problem: &testerv1.ReadProblemResponse_Problem{
|
||||
Id: *problem.Id,
|
||||
Name: *problem.Name,
|
||||
Description: *problem.Description,
|
||||
TimeLimit: *problem.TimeLimit,
|
||||
MemoryLimit: *problem.MemoryLimit,
|
||||
CreatedAt: AsTimestampP(problem.CreatedAt),
|
||||
UpdatedAt: AsTimestampP(problem.UpdatedAt),
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *TesterServer) UpdateProblem(ctx context.Context, req *testerv1.UpdateProblemRequest) (*emptypb.Empty, error) {
|
||||
problem := req.GetProblem()
|
||||
if problem == nil {
|
||||
return nil, status.Errorf(codes.Unknown, "") // FIXME
|
||||
}
|
||||
err := s.problemService.UpdateProblem(
|
||||
ctx,
|
||||
&models.Problem{
|
||||
Id: lib.AsInt32P(problem.Id),
|
||||
Name: problem.Name,
|
||||
Description: problem.Description,
|
||||
TimeLimit: problem.TimeLimit,
|
||||
MemoryLimit: problem.MemoryLimit,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
|
||||
return &emptypb.Empty{}, nil
|
||||
}
|
||||
|
||||
func (s *TesterServer) DeleteProblem(ctx context.Context, req *testerv1.DeleteProblemRequest) (*emptypb.Empty, error) {
|
||||
err := s.problemService.DeleteProblem(ctx, req.GetId())
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
return &emptypb.Empty{}, nil
|
||||
}
|
|
@ -1,124 +0,0 @@
|
|||
package transport
|
||||
|
||||
import (
|
||||
"context"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
"google.golang.org/protobuf/types/known/emptypb"
|
||||
userv1 "ms-auth/pkg/go/gen/user/v1"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (s *AuthServer) CreateUser(ctx context.Context, req *userv1.CreateUserRequest) (*userv1.CreateUserResponse, error) {
|
||||
user := req.GetUser()
|
||||
if user == nil {
|
||||
return nil, status.Errorf(codes.Unknown, "") // FIXME
|
||||
}
|
||||
id, err := s.userService.CreateUser(
|
||||
ctx,
|
||||
req.GetToken(),
|
||||
user.GetUsername(),
|
||||
user.GetPassword(),
|
||||
user.Email,
|
||||
AsTimeP(user.ExpiresAt),
|
||||
AsInt32P(user.Role),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
|
||||
return &userv1.CreateUserResponse{
|
||||
Id: *id,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *AuthServer) ReadUser(ctx context.Context, req *userv1.ReadUserRequest) (*userv1.ReadUserResponse, error) {
|
||||
user, err := s.userService.ReadUser(
|
||||
ctx,
|
||||
req.GetToken(),
|
||||
req.GetId(),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
|
||||
return &userv1.ReadUserResponse{
|
||||
User: &userv1.ReadUserResponse_User{
|
||||
Id: user.Id,
|
||||
Username: user.Username,
|
||||
Email: user.Email,
|
||||
ExpiresAt: AsTimestampP(&user.ExpiresAt),
|
||||
CreatedAt: AsTimestampP(&user.CreatedAt),
|
||||
Role: *AsRoleP(&user.Role),
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *AuthServer) UpdateUser(ctx context.Context, req *userv1.UpdateUserRequest) (*emptypb.Empty, error) {
|
||||
user := req.GetUser()
|
||||
if user == nil {
|
||||
return nil, status.Errorf(codes.Unknown, "") // FIXME
|
||||
}
|
||||
err := s.userService.UpdateUser(
|
||||
ctx,
|
||||
req.GetToken(),
|
||||
user.GetId(),
|
||||
user.Username,
|
||||
user.Password,
|
||||
user.Email,
|
||||
AsTimeP(user.ExpiresAt),
|
||||
AsInt32P(user.Role),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
return &emptypb.Empty{}, nil
|
||||
}
|
||||
|
||||
func (s *AuthServer) DeleteUser(ctx context.Context, req *userv1.DeleteUserRequest) (*emptypb.Empty, error) {
|
||||
err := s.userService.DeleteUser(
|
||||
ctx,
|
||||
req.GetToken(),
|
||||
req.GetId(),
|
||||
)
|
||||
if err != nil {
|
||||
return nil, status.Errorf(codes.Unknown, err.Error()) // FIXME
|
||||
}
|
||||
return &emptypb.Empty{}, nil
|
||||
}
|
||||
|
||||
func (s *AuthServer) ConfirmEmail(ctx context.Context, req *userv1.ConfirmEmailRequest) (*emptypb.Empty, error) {
|
||||
panic("not implemented")
|
||||
}
|
||||
|
||||
func (s *AuthServer) RegisterUser(ctx context.Context, req *userv1.RegisterUserRequest) (*emptypb.Empty, error) {
|
||||
panic("not implemented")
|
||||
}
|
||||
|
||||
func (s *AuthServer) ConfirmRegisterUser(ctx context.Context, req *userv1.ConfirmRegisterUserRequest) (*emptypb.Empty, error) {
|
||||
panic("not implemented")
|
||||
}
|
||||
|
||||
func (s *AuthServer) ResetPassword(ctx context.Context, req *userv1.ResetPasswordRequest) (*emptypb.Empty, error) {
|
||||
panic("not implemented")
|
||||
}
|
||||
|
||||
func (s *AuthServer) ConfirmResetPassword(ctx context.Context, req *userv1.ConfirmResetPasswordRequest) (*emptypb.Empty, error) {
|
||||
panic("not implemented")
|
||||
}
|
||||
|
||||
func shortenEmail(email *string) *string {
|
||||
if email == nil {
|
||||
return nil
|
||||
}
|
||||
parts := strings.Split(*email, "@")
|
||||
p1 := parts[0]
|
||||
p2 := parts[1]
|
||||
a := "****"
|
||||
if len(p1) <= 4 {
|
||||
e := a + "@" + p2
|
||||
return &e
|
||||
}
|
||||
e := p1[:len(p1)-4] + a + "@" + p2
|
||||
return &e
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue