diff --git a/internal/tls-client-api/api/add-cookies-handler.go b/internal/tls-client-api/api/add-cookies-handler.go new file mode 100644 index 0000000..e6e8fdb --- /dev/null +++ b/internal/tls-client-api/api/add-cookies-handler.go @@ -0,0 +1,65 @@ +package api + +import ( + "context" + "fmt" + "net/url" + + tls_client_cffi_src "github.com/bogdanfinn/tls-client/cffi_src" + "github.com/gin-gonic/gin" + "github.com/google/uuid" + "github.com/justtrackio/gosoline/pkg/apiserver" + "github.com/justtrackio/gosoline/pkg/cfg" + "github.com/justtrackio/gosoline/pkg/log" +) + +type AddCookiesHandler struct { + logger log.Logger +} + +func NewAddCookiesHandler(ctx context.Context, config cfg.Config, logger log.Logger) (gin.HandlerFunc, error) { + handler := AddCookiesHandler{ + logger: logger, + } + + return apiserver.CreateJsonHandler(handler), nil +} + +func (fh AddCookiesHandler) GetInput() interface{} { + return &tls_client_cffi_src.AddCookiesToSessionInput{} +} + +func (fh AddCookiesHandler) Handle(ctx context.Context, request *apiserver.Request) (*apiserver.Response, error) { + input, ok := request.Body.(*tls_client_cffi_src.AddCookiesToSessionInput) + + if !ok { + err := tls_client_cffi_src.NewTLSClientError(fmt.Errorf("bad request body provided")) + return handleErrorResponse(fh.logger, "", false, err) + } + + tlsClient, err := tls_client_cffi_src.GetClient(input.SessionId) + + if err != nil { + clientErr := tls_client_cffi_src.NewTLSClientError(err) + return handleErrorResponse(fh.logger, input.SessionId, true, clientErr) + } + + u, parsErr := url.Parse(input.Url) + if parsErr != nil { + clientErr := tls_client_cffi_src.NewTLSClientError(parsErr) + return handleErrorResponse(fh.logger, input.SessionId, true, clientErr) + } + + cookies := buildCookies(input.Cookies) + + if len(cookies) > 0 { + tlsClient.SetCookies(u, cookies) + } + + out := tls_client_cffi_src.CookiesFromSessionOutput{ + Id: uuid.New().String(), + Cookies: transformCookies(cookies), + } + + return apiserver.NewJsonResponse(out), nil +} diff --git a/internal/tls-client-api/api/api.go b/internal/tls-client-api/api/api.go index d0dbbd4..bc30a59 100644 --- a/internal/tls-client-api/api/api.go +++ b/internal/tls-client-api/api/api.go @@ -49,5 +49,12 @@ func DefineRouter(ctx context.Context, config cfg.Config, logger log.Logger) (*a d.POST("api/free-session", freeSessionRequestHandler) + addCookiesHandler, err := NewAddCookiesHandler(ctx, config, logger) + if err != nil { + return nil, fmt.Errorf("can not create addCookiesHandler: %w", err) + } + + d.POST("api/cookies/add", addCookiesHandler) + return d, nil } diff --git a/internal/tls-client-api/api/get-cookies-handler.go b/internal/tls-client-api/api/get-cookies-handler.go index 0bfbdb7..7924794 100644 --- a/internal/tls-client-api/api/get-cookies-handler.go +++ b/internal/tls-client-api/api/get-cookies-handler.go @@ -2,7 +2,6 @@ package api import ( "context" - "encoding/json" "fmt" "net/url" @@ -58,12 +57,16 @@ func (fh GetCookiesHandler) Handle(ctx context.Context, request *apiserver.Reque Cookies: transformCookies(cookies), } - jsonResponse, marshallError := json.Marshal(out) + /* + - Why was this here? Broke api response structure - if marshallError != nil { - clientErr := tls_client_cffi_src.NewTLSClientError(marshallError) - return handleErrorResponse(fh.logger, input.SessionId, true, clientErr) - } + jsonResponse, marshallError := json.Marshal(out) + + if marshallError != nil { + clientErr := tls_client_cffi_src.NewTLSClientError(marshallError) + return handleErrorResponse(fh.logger, input.SessionId, true, clientErr) + } + */ - return apiserver.NewJsonResponse(jsonResponse), nil + return apiserver.NewJsonResponse(out), nil }