firts try api versioning

This commit is contained in:
skeris 2024-05-18 01:44:33 +03:00
parent 3216f0d7a2
commit 6c475293cf
9 changed files with 35 additions and 103 deletions

@ -1,19 +1,19 @@
services: services:
verification: verificationv1.0.0:
container_name: verification_service container_name: verification_servicev1.0.0
restart: unless-stopped restart: unless-stopped
image: $CI_REGISTRY_IMAGE/staging:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID image: $CI_REGISTRY_IMAGE/staging:$CI_COMMIT_REF_SLUG.$CI_PIPELINE_ID
hostname: verification_service hostname: verification_servicev1.0.0
ports: ports:
- 10.8.0.6:7035:7035 - 10.8.0.6:7036:7035
environment: environment:
MONGO_URI: mongodb://$MONGO_USER:$MONGO_PASSWORD@10.8.0.6:27017/?authSource=verification MONGO_URI: mongodb://$MONGO_USER:$MONGO_PASSWORD@10.8.0.6:27017/?authSource=verification
PENADISK_URL: $PENADISK_URL PENADISK_URL: $PENADISK_URL
TELEGRAM_TOKEN: $TELEGRAM_TOKEN TELEGRAM_TOKEN: $TELEGRAM_TOKEN
TELEGRAM_CHANNEL_ID: $TELEGRAM_CHANNEL_ID TELEGRAM_CHANNEL_ID: $TELEGRAM_CHANNEL_ID
S3_ENDPOINT: $S3_ENDPOINT S3_ENDPOINT: s3.timeweb.cloud
S3_ACCESS_KEY_ID: $S3_ACCESS_KEY_ID S3_ACCESS_KEY_ID: 5CV77KVDUU9H0II9R24M
S3_SECRET_KEY: $S3_SECRET_KEY S3_SECRET_KEY: 0W0m8DyvdAKRJnsAy6mB5zndQ7RouJBLhqhtThcu
JWT_SECRET: $JWT_SECRET JWT_SECRET: $JWT_SECRET
HTTP_ADDRESS: ":7035" HTTP_ADDRESS: ":7035"
MONGO_HOST: "10.8.0.6" MONGO_HOST: "10.8.0.6"
@ -22,7 +22,8 @@ services:
MONGO_PASSWORD: $MONGO_PASSWORD MONGO_PASSWORD: $MONGO_PASSWORD
MONGO_AUTH: "verification" MONGO_AUTH: "verification"
MONGO_DATABASE_NAME: "verification" MONGO_DATABASE_NAME: "verification"
CUSTOMER_SVC_ADDRESS: "10.8.0.6:8065" CUSTOMER_SVC_ADDRESS: "http://10.8.0.6:8065"
STAGING_URL: "https://sadmin.pena" STAGING_URL: "https://sadmin.pena"
S3_FOLDER: verification
S3_FILE_URL: https://3c580be9-cf31f296-d055-49cf-b39e-30c7959dc17b.s3.timeweb.cloud
tty: true tty: true

@ -53,7 +53,7 @@ func Run(cfg *config.Config) {
logger.Fatal("MinioClient", zap.Error(err)) logger.Fatal("MinioClient", zap.Error(err))
} }
reps, err := initialize.NewRepositories(ctx, logger, mongoDB, minioClient) reps, err := initialize.NewRepositories(ctx, logger, mongoDB, minioClient, cfg.S3Folder, cfg.S3FileUrl)
if err != nil { if err != nil {
logger.Fatal("Repositories", zap.Error(err)) logger.Fatal("Repositories", zap.Error(err))
} }

@ -17,8 +17,8 @@ func NewCustomer(logger *zap.Logger, address string) *Customer {
return &Customer{logger: logger, address: address} return &Customer{logger: logger, address: address}
} }
func (c *Customer) UpdateAccountVerification(userId, status string) (*models.RespUpdateVerificationStatus, error) { func (c *Customer) UpdateAccountVerification(userId, status, token string) (*models.RespUpdateVerificationStatus, error) {
agent := fiber.Patch(fmt.Sprintf("%s/account/%s", c.address, userId)) agent := fiber.Patch(fmt.Sprintf("%s/account/%s", c.address, userId)).Add("Authorization",token)
agent.JSON(&models.ReqCreateVerification{Status: status}) agent.JSON(&models.ReqCreateVerification{Status: status})
err := agent.Parse() err := agent.Parse()

@ -20,6 +20,8 @@ type Config struct {
S3SecretKey string `env:"S3_SECRET_KEY,required"` S3SecretKey string `env:"S3_SECRET_KEY,required"`
CustomerSvcAddress string `env:"CUSTOMER_SVC_ADDRESS,required"` CustomerSvcAddress string `env:"CUSTOMER_SVC_ADDRESS,required"`
StagingURL string `env:"STAGING_URL,required"` StagingURL string `env:"STAGING_URL,required"`
S3Folder string `env:"S3_FOLDER,required"`
S3FileUrl string `env:"S3_FILE_URL,required"`
} }
func NewConfig(file ...string) (*Config, error) { func NewConfig(file ...string) (*Config, error) {

@ -137,7 +137,7 @@ func (r *VerificationController) SetVerificationStatus(c *fiber.Ctx) error {
return c.Status(fiber.StatusBadRequest).JSON(errValidate) return c.Status(fiber.StatusBadRequest).JSON(errValidate)
} }
_, err = r.repository.Update(c.Context(), &models.Verification{ updated, err := r.repository.Update(c.Context(), &models.Verification{
ID: req.ID, ID: req.ID,
Accepted: req.Accepted, Accepted: req.Accepted,
Status: req.Status, Status: req.Status,
@ -150,7 +150,8 @@ func (r *VerificationController) SetVerificationStatus(c *fiber.Ctx) error {
} }
if req.Accepted { if req.Accepted {
_, err := r.customer.UpdateAccountVerification(req.ID, req.Status) token := c.Locals("token").(string)
_, err := r.customer.UpdateAccountVerification(updated.UserID, req.Status,token)
if err != nil { if err != nil {
return fiber.NewError(fiber.StatusInternalServerError, err.Error()) return fiber.NewError(fiber.StatusInternalServerError, err.Error())
} }

@ -16,13 +16,8 @@ func NewRepositories(
ctx context.Context, ctx context.Context,
logger *zap.Logger, logger *zap.Logger,
mongoDB *mongo.Database, mongoDB *mongo.Database,
s3 *minio.Client) (*Repositories, error) { s3 *minio.Client, folder, url string) (*Repositories, error) {
reps := &Repositories{Verification: repository.NewVerificationRepository(logger, mongoDB, s3)} reps := &Repositories{Verification: repository.NewVerificationRepository(logger, mongoDB, s3, folder, url)}
err := reps.Verification.Init(ctx)
if err != nil {
return nil, err
}
return reps, nil return reps, nil
} }

@ -2,11 +2,8 @@ package repository
import ( import (
"context" "context"
"encoding/json"
"errors" "errors"
"fmt" "fmt"
"github.com/minio/minio-go/v7/pkg/policy"
"github.com/minio/minio-go/v7/pkg/set"
"mime/multipart" "mime/multipart"
"strings" "strings"
"time" "time"
@ -24,88 +21,24 @@ type VerificationRepository struct {
logger *zap.Logger logger *zap.Logger
mongo *mongo.Collection mongo *mongo.Collection
s3 *minio.Client s3 *minio.Client
folder, url string
} }
const ( const (
VerificationEndpointURL = "https://hub.pena.digital" VerificationEndpointURL = "https://hub.pena.digital"
VerificationBucket = "verification1" VerificationBucket = "3c580be9-cf31f296-d055-49cf-b39e-30c7959dc17b"
VerificationCollection = "verification" VerificationCollection = "verification"
) )
func NewVerificationRepository(logger *zap.Logger, mongoDb *mongo.Database, s3 *minio.Client) *VerificationRepository { func NewVerificationRepository(logger *zap.Logger, mongoDb *mongo.Database, s3 *minio.Client, folder, url string) *VerificationRepository {
return &VerificationRepository{ return &VerificationRepository{
logger: logger, logger: logger,
mongo: mongoDb.Collection(VerificationCollection), mongo: mongoDb.Collection(VerificationCollection),
s3: s3, s3: s3,
folder: folder,
url: url,
} }
} }
func (r *VerificationRepository) Init(ctx context.Context) error {
ok, err := r.s3.BucketExists(ctx, VerificationBucket)
if r.err(err) {
return err
}
if !ok {
err = r.s3.MakeBucket(ctx, VerificationBucket, minio.MakeBucketOptions{ObjectLocking: false})
if r.err(err) {
return err
}
policyConsoleStatement := policy.Statement{
Actions: set.CreateStringSet("*"),
Conditions: policy.ConditionMap{
"StringLike": policy.ConditionKeyMap{
"aws:referer": set.CreateStringSet(fmt.Sprintf("https://console.cloud.yandex.*/folders/*/storage/buckets/%s*", VerificationBucket)),
},
},
Effect: "Allow",
Principal: policy.User{AWS: set.CreateStringSet("*")},
Resources: set.CreateStringSet(fmt.Sprintf("arn:aws:s3:::%s/*", VerificationBucket),
fmt.Sprintf("arn:aws:s3:::%s", VerificationBucket)),
Sid: "console-statement",
}
policyServiceAccount := policy.Statement{
Actions: set.CreateStringSet("*"),
Conditions: nil,
Effect: "Allow",
Principal: policy.User{CanonicalUser: set.CreateStringSet("ajelmc4tjbct675tjdh9")},
Resources: set.CreateStringSet(fmt.Sprintf("arn:aws:s3:::%s/*", VerificationBucket),
fmt.Sprintf("arn:aws:s3:::%s", VerificationBucket)),
Sid: "service-account-statement",
}
policySharingBucket := policy.Statement{
Actions: set.CreateStringSet("s3:GetObject"),
Conditions: nil,
Effect: "Allow",
Principal: policy.User{AWS: set.CreateStringSet("*")},
Resources: set.CreateStringSet(fmt.Sprintf("arn:aws:s3:::%s/*", VerificationBucket),
fmt.Sprintf("arn:aws:s3:::%s", VerificationBucket)),
Sid: "sharing-bucket",
}
p := policy.BucketAccessPolicy{Version: "2012-10-17", Statements: []policy.Statement{
policyConsoleStatement,
policyServiceAccount,
policySharingBucket,
}}
outPolicy, err := json.Marshal(&p)
if r.err(err) {
return err
}
err = r.s3.SetBucketPolicy(ctx, VerificationBucket, string(outPolicy))
if r.err(err) {
return err
}
}
return nil
}
func (r *VerificationRepository) Insert( func (r *VerificationRepository) Insert(
ctx context.Context, ctx context.Context,
userID string, userID string,
@ -121,7 +54,7 @@ func (r *VerificationRepository) Insert(
return nil, err return nil, err
} }
_, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s", userID, innFH.Filename), inn, innFH.Size, minio.PutObjectOptions{}) _, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s/%s", r.folder, userID, innFH.Filename), inn, innFH.Size, minio.PutObjectOptions{})
if r.err(err) { if r.err(err) {
return nil, err return nil, err
} }
@ -132,7 +65,7 @@ func (r *VerificationRepository) Insert(
} }
// Put rule file // Put rule file
_, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s", userID, ruleFH.Filename), rule, ruleFH.Size, minio.PutObjectOptions{}) _, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s/%s", r.folder, userID, ruleFH.Filename), rule, ruleFH.Size, minio.PutObjectOptions{})
if r.err(err) { if r.err(err) {
return nil, err return nil, err
} }
@ -143,7 +76,7 @@ func (r *VerificationRepository) Insert(
return nil, err return nil, err
} }
_, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s", userID, egruleFH.Filename), egrule, egruleFH.Size, minio.PutObjectOptions{}) _, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s/%s", r.folder, userID, egruleFH.Filename), egrule, egruleFH.Size, minio.PutObjectOptions{})
if r.err(err) { if r.err(err) {
return nil, err return nil, err
} }
@ -155,7 +88,7 @@ func (r *VerificationRepository) Insert(
return nil, err return nil, err
} }
_, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s", userID, certFH.Filename), cert, certFH.Size, minio.PutObjectOptions{}) _, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s/%s", r.folder, userID, certFH.Filename), cert, certFH.Size, minio.PutObjectOptions{})
if r.err(err) { if r.err(err) {
return nil, err return nil, err
} }
@ -172,15 +105,15 @@ func (r *VerificationRepository) Insert(
record.Files = append(record.Files, []models.VerificationFile{ record.Files = append(record.Files, []models.VerificationFile{
{ {
Name: "inn", Name: "inn",
Url: fmt.Sprintf("%s/%s/%s/%s", VerificationEndpointURL, VerificationBucket, userID, innFH.Filename), Url: fmt.Sprintf("%s/%s/%s/%s", r.url,r.folder, userID, innFH.Filename),
}, },
{ {
Name: "rule", Name: "rule",
Url: fmt.Sprintf("%s/%s/%s/%s", VerificationEndpointURL, VerificationBucket, userID, ruleFH.Filename), Url: fmt.Sprintf("%s/%s/%s/%s", r.url,r.folder, userID, ruleFH.Filename),
}, },
{ {
Name: "egrule", Name: "egrule",
Url: fmt.Sprintf("%s/%s/%s/%s", VerificationEndpointURL, VerificationBucket, userID, egruleFH.Filename), Url: fmt.Sprintf("%s/%s/%s/%s", r.url,r.folder, userID, egruleFH.Filename),
}, },
}...) }...)
@ -272,12 +205,12 @@ func (r *VerificationRepository) UpdateFile(ctx context.Context, userID, fileNam
return nil, err return nil, err
} }
_, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s", userID, fileHeader.Filename), fileReader, fileHeader.Size, minio.PutObjectOptions{}) _, err = r.s3.PutObject(ctx, VerificationBucket, fmt.Sprintf("%s/%s/%s", r.folder, userID, fileHeader.Filename), fileReader, fileHeader.Size, minio.PutObjectOptions{})
if r.err(err) { if r.err(err) {
return nil, err return nil, err
} }
fileURL := fmt.Sprintf("%s/%s/%s/%s", VerificationEndpointURL, VerificationBucket, userID, fileHeader.Filename) fileURL := fmt.Sprintf("%s/%s/%s/%s", VerificationEndpointURL,r.folder, userID, fileHeader.Filename)
// remove old file // remove old file
verification, err := r.GetByUserID(ctx, userID) verification, err := r.GetByUserID(ctx, userID)
@ -289,7 +222,6 @@ func (r *VerificationRepository) UpdateFile(ctx context.Context, userID, fileNam
return nil, fmt.Errorf("no verification found") return nil, fmt.Errorf("no verification found")
} }
fmt.Println("BUG",verification.Files)
found := false found := false
for iterator, file := range verification.Files { for iterator, file := range verification.Files {
if file.Name != fileName { if file.Name != fileName {

@ -39,6 +39,7 @@ func Jwt() fiber.Handler {
} }
c.Locals("userID", jwt.GetUserID()) c.Locals("userID", jwt.GetUserID())
c.Locals("token", c.Get(jwt_adapter.DefaultHeaderKey))
return c.Next() return c.Next()
} }
} }

BIN
main Executable file

Binary file not shown.