/
backend_db.go
89 lines (79 loc) · 3.48 KB
/
backend_db.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package main
import (
"context"
"fmt"
mimosasql "github.com/ca-risken/common/pkg/database/sql"
"github.com/ca-risken/diagnosis/pkg/model"
"gorm.io/gorm"
)
type diagnosisRepoInterface interface {
ListDiagnosisDataSource(context.Context, uint32, string) (*[]model.DiagnosisDataSource, error)
GetDiagnosisDataSource(context.Context, uint32, uint32) (*model.DiagnosisDataSource, error)
UpsertDiagnosisDataSource(context.Context, *model.DiagnosisDataSource) (*model.DiagnosisDataSource, error)
DeleteDiagnosisDataSource(context.Context, uint32, uint32) error
ListWpscanSetting(context.Context, uint32, uint32) (*[]model.WpscanSetting, error)
GetWpscanSetting(context.Context, uint32, uint32) (*model.WpscanSetting, error)
UpsertWpscanSetting(context.Context, *model.WpscanSetting) (*model.WpscanSetting, error)
DeleteWpscanSetting(context.Context, uint32, uint32) error
ListPortscanSetting(context.Context, uint32, uint32) (*[]model.PortscanSetting, error)
GetPortscanSetting(context.Context, uint32, uint32) (*model.PortscanSetting, error)
UpsertPortscanSetting(context.Context, *model.PortscanSetting) (*model.PortscanSetting, error)
DeletePortscanSetting(context.Context, uint32, uint32) error
ListPortscanTarget(context.Context, uint32, uint32) (*[]model.PortscanTarget, error)
GetPortscanTarget(context.Context, uint32, uint32) (*model.PortscanTarget, error)
UpsertPortscanTarget(context.Context, *model.PortscanTarget) (*model.PortscanTarget, error)
DeletePortscanTarget(context.Context, uint32, uint32) error
DeletePortscanTargetByPortscanSettingID(context.Context, uint32, uint32) error
ListApplicationScan(context.Context, uint32, uint32) (*[]model.ApplicationScan, error)
GetApplicationScan(context.Context, uint32, uint32) (*model.ApplicationScan, error)
UpsertApplicationScan(context.Context, *model.ApplicationScan) (*model.ApplicationScan, error)
DeleteApplicationScan(context.Context, uint32, uint32) error
ListApplicationScanBasicSetting(context.Context, uint32, uint32) (*[]model.ApplicationScanBasicSetting, error)
GetApplicationScanBasicSetting(context.Context, uint32, uint32) (*model.ApplicationScanBasicSetting, error)
UpsertApplicationScanBasicSetting(context.Context, *model.ApplicationScanBasicSetting) (*model.ApplicationScanBasicSetting, error)
DeleteApplicationScanBasicSetting(context.Context, uint32, uint32) error
//for InvokeScan
ListAllWpscanSetting(context.Context) (*[]model.WpscanSetting, error)
}
type diagnosisRepository struct {
MasterDB *gorm.DB
SlaveDB *gorm.DB
}
func newDiagnosisRepository(conf *DBConfig) diagnosisRepoInterface {
repo := diagnosisRepository{}
repo.MasterDB = initDB(conf, true)
repo.SlaveDB = initDB(conf, false)
return &repo
}
type DBConfig struct {
MasterHost string
MasterUser string
MasterPassword string
SlaveHost string
SlaveUser string
SlavePassword string
Schema string
Port int
LogMode bool
MaxConnection int
}
func initDB(conf *DBConfig, isMaster bool) *gorm.DB {
var user, pass, host string
if isMaster {
user = conf.MasterUser
pass = conf.MasterPassword
host = conf.MasterHost
} else {
user = conf.SlaveUser
pass = conf.SlavePassword
host = conf.SlaveHost
}
dsn := fmt.Sprintf("%s:%s@tcp([%s]:%d)/%s?charset=utf8mb4&interpolateParams=true&parseTime=true&loc=Local",
user, pass, host, conf.Port, conf.Schema)
db, err := mimosasql.Open(dsn, conf.LogMode, conf.MaxConnection)
if err != nil {
fmt.Printf("Failed to open DB. isMaster: %v", isMaster)
panic(err)
}
return db
}