Implement a couple of rpcs
All checks were successful
ci/woodpecker/push/build Pipeline was successful
All checks were successful
ci/woodpecker/push/build Pipeline was successful
Signed-off-by: Nikolai Rodionov <iam@allanger.xyz>
This commit is contained in:
@@ -3,23 +3,44 @@ package v1
|
||||
import (
|
||||
"context"
|
||||
|
||||
"gitea.badhouseplants.net/softplayer/softplayer-backend/internal/services"
|
||||
projects "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/projects/v1"
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
func NewProjectsServer() *ProjectsServer {
|
||||
return &ProjectsServer{}
|
||||
func NewProjectsServer(projectCtrl *services.ProjectsController) *ProjectsServer {
|
||||
return &ProjectsServer{
|
||||
projectCtrl: projectCtrl,
|
||||
}
|
||||
}
|
||||
|
||||
// var _ projects.ProjectsServiceServer = (*ProjectsServer)(nil)
|
||||
|
||||
type ProjectsServer struct {
|
||||
projects.UnimplementedProjectsServiceServer
|
||||
projectCtrl *services.ProjectsController
|
||||
}
|
||||
|
||||
// CreateProject implements [v1.ProjectsServiceServer].
|
||||
func (p *ProjectsServer) CreateProject(context.Context, *projects.CreateProjectRequest) (*projects.CreateProjectResponse, error) {
|
||||
panic("unimplemented")
|
||||
func (p *ProjectsServer) CreateProject(ctx context.Context, in *projects.CreateProjectRequest) (*projects.CreateProjectResponse, error) {
|
||||
claims, err := services.ClaimsFromContext(ctx)
|
||||
if err != nil {
|
||||
return nil, status.Error(codes.Aborted, "Context is invalid")
|
||||
}
|
||||
|
||||
projectData := &services.ProjectData{
|
||||
Name: in.Name,
|
||||
Slug: in.Slug,
|
||||
Description: in.Description,
|
||||
}
|
||||
|
||||
id, err := p.projectCtrl.Create(ctx, projectData, claims.UserID)
|
||||
if err != nil {
|
||||
return nil, status.Error(codes.Aborted, "Couldn't create a project")
|
||||
}
|
||||
return &projects.CreateProjectResponse{Id: id}, nil
|
||||
}
|
||||
|
||||
// GetProject implements [v1.ProjectsServiceServer].
|
||||
@@ -28,8 +49,27 @@ func (p *ProjectsServer) GetProject(context.Context, *projects.GetProjectRequest
|
||||
}
|
||||
|
||||
// ListProjects implements [v1.ProjectsServiceServer].
|
||||
func (p *ProjectsServer) ListProjects(*projects.ListProjectsRequest, grpc.ServerStreamingServer[projects.ListProjectsResponse]) error {
|
||||
panic("unimplemented")
|
||||
func (p *ProjectsServer) ListProjects(_in *projects.ListProjectsRequest, stream grpc.ServerStreamingServer[projects.ListProjectsResponse]) error {
|
||||
claims, err := services.ClaimsFromContext(stream.Context())
|
||||
if err != nil {
|
||||
return status.Error(codes.Aborted, "Context is invalid")
|
||||
}
|
||||
|
||||
res, err := p.projectCtrl.List(stream.Context(), claims.UserID)
|
||||
if err != nil {
|
||||
return status.Error(codes.Aborted, "Couldn't list projects")
|
||||
}
|
||||
for _, project := range res {
|
||||
payload := &projects.ListProjectsResponse{
|
||||
Id: project.UUID,
|
||||
Slug: "dummy",
|
||||
Name: project.Name,
|
||||
}
|
||||
if err := stream.Send(payload); err != nil {
|
||||
return status.Error(codes.Aborted, "Couldn't send data")
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// UpdateProject implements [v1.ProjectsServiceServer].
|
||||
|
||||
@@ -5,14 +5,14 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"gitea.badhouseplants.net/softplayer/softplayer-backend/internal/controllers"
|
||||
"gitea.badhouseplants.net/softplayer/softplayer-backend/internal/services"
|
||||
accounts "gitea.badhouseplants.net/softplayer/softplayer-go-proto/pkg/accounts/v1"
|
||||
"google.golang.org/grpc/codes"
|
||||
"google.golang.org/grpc/status"
|
||||
)
|
||||
|
||||
func NewRefreshSessionServer(
|
||||
authorizationCtrl *controllers.AuthController,
|
||||
authorizationCtrl *services.AuthController,
|
||||
) *RefreshSessionService {
|
||||
return &RefreshSessionService{
|
||||
authorizationCtrl: authorizationCtrl,
|
||||
@@ -21,7 +21,7 @@ func NewRefreshSessionServer(
|
||||
|
||||
type RefreshSessionService struct {
|
||||
accounts.UnimplementedRefreshSessionServiceServer
|
||||
authorizationCtrl *controllers.AuthController
|
||||
authorizationCtrl *services.AuthController
|
||||
}
|
||||
|
||||
func (srv *RefreshSessionService) RefreshSession(ctx context.Context, in *accounts.RefreshSessionRequest) (*accounts.RefreshSessionResponse, error) {
|
||||
@@ -32,13 +32,13 @@ func (srv *RefreshSessionService) RefreshSession(ctx context.Context, in *accoun
|
||||
return nil, status.Error(codes.Aborted, "Invalid token is sent")
|
||||
}
|
||||
|
||||
if claims.TokenType != controllers.TokenTypeRefresh {
|
||||
if claims.TokenType != services.TokenTypeRefresh {
|
||||
return nil, status.Error(codes.Unauthenticated, "Invalid token")
|
||||
}
|
||||
|
||||
session, err := srv.authorizationCtrl.GetSession(ctx, claims.TokenID)
|
||||
if err != nil {
|
||||
if errors.Is(err, controllers.ErrSessionNotFound) {
|
||||
if errors.Is(err, services.ErrSessionNotFound) {
|
||||
return nil, status.Error(codes.Unauthenticated, "Session doesn't exists")
|
||||
}
|
||||
return nil, status.Error(codes.Internal, "Somethings is broken on our side")
|
||||
@@ -48,24 +48,24 @@ func (srv *RefreshSessionService) RefreshSession(ctx context.Context, in *accoun
|
||||
return nil, status.Error(codes.Unauthenticated, "Invalid session")
|
||||
}
|
||||
|
||||
accessToken, _, err := srv.authorizationCtrl.GenerateToken(&controllers.JWTData{
|
||||
accessToken, _, err := srv.authorizationCtrl.GenerateToken(&services.JWTData{
|
||||
UserID: claims.UserID,
|
||||
TokenType: controllers.TokenTypeAccess,
|
||||
TokenAud: controllers.TokenAudWeb,
|
||||
TokenType: services.TokenTypeAccess,
|
||||
TokenAud: services.TokenAudWeb,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, status.Error(codes.Aborted, "Couldn't generate an access token")
|
||||
}
|
||||
|
||||
refreshToken, tokenID, err := srv.authorizationCtrl.GenerateToken(&controllers.JWTData{
|
||||
refreshToken, tokenID, err := srv.authorizationCtrl.GenerateToken(&services.JWTData{
|
||||
UserID: claims.UserID,
|
||||
TokenType: controllers.TokenTypeRefresh,
|
||||
TokenAud: controllers.TokenAudWeb,
|
||||
TokenType: services.TokenTypeRefresh,
|
||||
TokenAud: services.TokenAudWeb,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, status.Error(codes.Aborted, "Couldn't generate an access token")
|
||||
}
|
||||
newSession := &controllers.Session{UserID: session.UserID}
|
||||
newSession := &services.Session{UserID: session.UserID}
|
||||
|
||||
if err := srv.authorizationCtrl.SaveSession(ctx, tokenID, newSession); err != nil {
|
||||
return nil, status.Error(codes.Aborted, "Couldn't store session")
|
||||
|
||||
Reference in New Issue
Block a user