firts try api versioning
This commit is contained in:
parent
3216f0d7a2
commit
6c475293cf
@ -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
BIN
main
Executable file
Binary file not shown.
Loading…
Reference in New Issue
Block a user