-
Notifications
You must be signed in to change notification settings - Fork 4
/
db.go
111 lines (92 loc) · 2.64 KB
/
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package db
import (
"github.com/jinzhu/gorm"
_ "github.com/mattn/go-sqlite3"
"github.com/moorada/neferpitool/pkg/domains"
"github.com/moorada/neferpitool/pkg/log"
"github.com/moorada/neferpitool/pkg/reliableChanges"
)
var db *gorm.DB
/*Initialize the DataBase*/
func InitDB(nameDB string) {
var err error
db, err = gorm.Open("sqlite3", "./"+nameDB+".db")
if err != nil {
log.Fatal("Failed to connect database %s", err.Error())
}
// Migrate the schema
db.AutoMigrate(&domains.LegitDomain{})
db.AutoMigrate(&domains.TypoDomain{})
db.AutoMigrate(&reliableChanges.ReliableChange{})
db.AutoMigrate(&reliableChanges.CronExpression{})
}
func CloseDB() {
err := db.Close()
if err != nil {
log.Error(err.Error())
}
}
func uniqueTypoDomains(ds domains.TypoList) domains.TypoList {
domainsMap := make(map[string]domains.TypoDomain)
for _, d := range ds {
_, bol := domainsMap[d.Name]
if bol {
if domainsMap[d.Name].ID < d.ID {
domainsMap[d.Name] = d
}
} else {
domainsMap[d.Name] = d
}
}
var dsUnique []domains.TypoDomain
for _, dm := range domainsMap {
dsUnique = append(dsUnique, dm)
}
return dsUnique
}
/*Return a list of all the typo-domains about mainDomain*/
func GetTypoDomainListFromDB(mainDomain string) domains.TypoList {
var tds []domains.TypoDomain
db.Where("legit_domain = ?", mainDomain).Find(&tds)
/*senza uniqueTypoDomains:
Select * , MAX(id) from typo_domains group by name
*/
//db.Exec("SELECT * , MAX(updated_at) from typo_domains group by name").Scan(&tds)
return uniqueTypoDomains(tds)
//return tds
}
func GetTypoDomainListWithStatusFromDB(mainDomain string, status []int) domains.TypoList {
var tds []domains.TypoDomain
db.Where("legit_domain = ? AND status IN (?)", mainDomain, status).Find(&tds)
/*senza uniqueTypoDomains:
Select * , MAX(id) from typo_domains group by name
*/
//db.Exec("SELECT * , MAX(updated_at) from typo_domains group by name").Scan(&tds)
return uniqueTypoDomains(tds)
}
/*Return a list of all the typo-domains about mainDomain*/
func GetAllTypoDomainListFromDB() domains.TypoList {
var tds domains.TypoList
db.Find(&tds)
/*senza uniqueTypoDomains:
Select * , MAX(id) from typo_domains group by name
*/
//db.Exec("SELECT * , MAX(updated_at) from typo_domains group by name").Scan(&tds)
return tds
}
func AddTypoListToDB(tds domains.TypoList) {
for _, td := range tds {
AddTypoDomainToDB(td)
}
}
func AddReliableChangeListToDB(tds []reliableChanges.ReliableChange) {
for _, td := range tds {
AddReliableChangeToDB(td)
}
}
/*Return a list of all the main-domains*/
func GetMainDomainListFromDB() domains.LegitList {
var ds []domains.LegitDomain
db.Find(&ds)
return ds
}