Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test to replace gin to echo #32

Merged
merged 2 commits into from
Nov 24, 2023
Merged

Test to replace gin to echo #32

merged 2 commits into from
Nov 24, 2023

Conversation

yunkon-kim
Copy link
Member

Gin 관련 코드를 Echo 로 변경하는 PR 입니다.

빌드 후 실행까지만 가능한 상태의 코드 입니다.

실제 구동하면서 테스트가 필요합니다.

주로 확인해야할 부분은 아래와 같습니다.

아래 함수들 in publicfunc.go

func getData(jobtype string, ctx echo.Context) interface{} {
	if jobtype == "gen" {
		// data, _ := ctx.GetRawData() <- gin

		// Read the request body
		data, err := io.ReadAll(ctx.Request().Body)
		if err != nil {
			return err
		}

		// Reset the request body using io.NopCloser
		ctx.Request().Body = io.NopCloser(bytes.NewBuffer(data))

		params := GenDataParams{}
		json.Unmarshal(data, &params)
		return params
	} else {

		return nil
	}
}
func getDataWithBind(logger *logrus.Logger, startTime time.Time, ctx echo.Context, params interface{}) bool {
	if err := ctx.Bind(params); err != nil {
		end := time.Now()
		logger.Error("Failed to bind form data")
		logger.Infof("End time : %s", end.Format("2006-01-02T15:04:05-07:00"))
		logger.Infof("Elapsed time : %s", end.Sub(startTime).String())
		return false
	}
	return true
}
func gcpCreateCredFile(logger *logrus.Logger, startTime time.Time, ctx echo.Context) (string, string, bool) {
	logger.Info("Create a temporary directory where credential files will be stored")
	// func (*http.Request).FormFile(key string) (multipart.File, *multipart.FileHeader, error)
	// gcpCredentialFile, gcpCredentialHeader, err := ctx.Request.FormFile("gcpCredential")
	gcpCredentialHeader, err := ctx.FormFile("gcpCredential")
	if err != nil {
		end := time.Now()
		logger.Errorf("Get CredentialFile error : %v", err)
		logger.Infof("end time : %s", end.Format("2006-01-02T15:04:05-07:00"))
		logger.Infof("Elapsed time : %s", end.Sub(startTime).String())
		return "", "", false
	}

	credTmpDir, err := os.MkdirTemp("", "datamold-gcp-cred-")
	if err != nil {
		end := time.Now()
		logger.Errorf("Get CredentialFile error : %v", err)
		logger.Infof("end time : %s", end.Format("2006-01-02T15:04:05-07:00"))
		logger.Infof("Elapsed time : %s", end.Sub(startTime).String())
		return "", "", false
	}

	credFileName := filepath.Join(credTmpDir, gcpCredentialHeader.Filename)
	gcpCredentialFile, err := gcpCredentialHeader.Open()
	// err = ctx.SaveUploadedFile(gcpCredentialHeader, credFileName)
	if err != nil {
		end := time.Now()
		logger.Errorf("Get CredentialFile error : %v", err)
		logger.Infof("end time : %s", end.Format("2006-01-02T15:04:05-07:00"))
		logger.Infof("Elapsed time : %s", end.Sub(startTime).String())
		return "", "", false
	}
	defer gcpCredentialFile.Close()

	dst, err := os.Create(credFileName)
	if err != nil {
		end := time.Now()
		logger.Errorf("File create error : %v", err)
		logger.Infof("end time : %s", end.Format("2006-01-02T15:04:05-07:00"))
		logger.Infof("Elapsed time : %s", end.Sub(startTime).String())
		return "", "", false
	}
	defer dst.Close()

	if _, err = io.Copy(dst, gcpCredentialFile); err != nil {
		end := time.Now()
		logger.Errorf("File copy error : %v", err)
		logger.Infof("end time : %s", end.Format("2006-01-02T15:04:05-07:00"))
		logger.Infof("Elapsed time : %s", end.Sub(startTime).String())
		return "", "", false
	}

	return credTmpDir, credFileName, true
}

아래 미들웨어 in serve.go

// Custom middleware to check the list of trusted proxies
func TrustedProxiesMiddleware(trustedProxies []string) echo.MiddlewareFunc {
	return func(next echo.HandlerFunc) echo.HandlerFunc {
		return func(c echo.Context) error {
			clientIP := c.RealIP() // Echo gets the real IP of the client

			for _, proxy := range trustedProxies {
				if strings.HasPrefix(clientIP, proxy) {
					// Request is from a trusted proxy
					return next(c)
				}
			}

			// Handling requests from untrusted sources
			return echo.NewHTTPError(http.StatusForbidden, "Access denied")
		}
	}
}

API 문서 (Swagger) 부분은 별도로 진행하겠습니다 😅

@yunkon-kim
Copy link
Member Author

@jjang-go @zcon-cychoi 안녕하세요. 일정과 관련하여 문의를 드립니다.

이번 변경 건이 반영되면, OSS 라이선스 검증 절차를 한번 더 수행해야하는 상황입니다.

Web Framework가 변경되면서 기능이 정상 동작하는지 테스트하고, 필요에 따라 트러블슈팅을 진행해야할 것 같습니다. 관련하여, 테스트 소요 시간 또는 대략적인 완료 일정이 어떻게 되실지 문의를 드립니다.

@jjang-go
Copy link
Contributor

jjang-go commented Nov 24, 2023

@yunkon-kim 현재 따로 fork해서 테스트 중입니다. 몇몇 코드 수정이 불가피해서 코드를 고치고 테스트 중입니다. 이르면 오늘 중으로 끝날 거 같고 늦어도 내일 안으로 테스트 마무리될 걸 예상됩니다. gin과 관련된 코드는 삭제하겠습니다.

수정된 코드는 다시 main브런치로 pr하면 되나요?

@yunkon-kim
Copy link
Member Author

yunkon-kim commented Nov 24, 2023

@jjang-go 빠르게 일정 공유해주셔서 감사드립니다!

수정된 코드는 다시 main브런치로 pr하면 되나요?

진행 하시는데 이슈가 없는 가장 편한 방식으로 진행하시기 바랍니다.

개인적인 생각으로는 이 PR을 머지 후에, 이를 바탕으로 진행하고 계신 내용을 PR하는 것이 좋을 것 같다고 생각하는데요. 어떠실까요? ^^ (이 방식이 괜찮으시면 Merge를 진행해주십시오.)

@jjang-go jjang-go merged commit 614bcc6 into main Nov 24, 2023
2 checks passed
@jjang-go jjang-go deleted the test-to-replace-gin-to-echo branch November 24, 2023 02:24
@jjang-go jjang-go restored the test-to-replace-gin-to-echo branch November 24, 2023 02:24
@jjang-go jjang-go deleted the test-to-replace-gin-to-echo branch November 27, 2023 03:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants