275 lines
6.6 KiB
Go
275 lines
6.6 KiB
Go
package service
|
|
|
|
import (
|
|
"context"
|
|
"github.com/kallydev/privacy/database"
|
|
)
|
|
|
|
type Result interface {
|
|
queryPhoneNumber(databases []database.Database, phoneNumber int64) error
|
|
queryIDNumber(databases []database.Database, idNumber string) error
|
|
queryQQNumber(databases []database.Database, qqNumber int64) error
|
|
queryEmail(databases []database.Database, email string) error
|
|
|
|
addName(name string)
|
|
addNickname(nickname string)
|
|
addPhoneNumber(phoneNumber int64)
|
|
addIDNumber(idNumber string)
|
|
addQQNumber(qqNumber int64)
|
|
addPassword(password string)
|
|
addEmail(email string)
|
|
addAddress(address string)
|
|
}
|
|
|
|
var (
|
|
_ Result = &QueryResult{}
|
|
)
|
|
|
|
type QueryResult struct {
|
|
Names map[Name]bool `json:"names"`
|
|
Nicknames map[Nickname]bool `json:"nicknames"`
|
|
PhoneNumbers map[PhoneNumber]bool `json:"phone_numbers"`
|
|
IDNumbers map[IDNumber]bool `json:"id_numbers"`
|
|
QQNumbers map[QQNumber]bool `json:"qq_numbers"`
|
|
Passwords map[Password]bool `json:"passwords"`
|
|
Emails map[Email]bool `json:"emails"`
|
|
Addresses map[Address]bool `json:"addresses"`
|
|
}
|
|
|
|
func NewQueryResult() *QueryResult {
|
|
return &QueryResult{
|
|
Names: make(map[Name]bool),
|
|
Nicknames: make(map[Nickname]bool),
|
|
PhoneNumbers: make(map[PhoneNumber]bool),
|
|
IDNumbers: make(map[IDNumber]bool),
|
|
QQNumbers: make(map[QQNumber]bool),
|
|
Passwords: make(map[Password]bool),
|
|
Emails: make(map[Email]bool),
|
|
Addresses: make(map[Address]bool),
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) addModel(model database.Model) {
|
|
if name, valid := model.GetName(); valid {
|
|
result.addName(name)
|
|
}
|
|
if nickname, valid := model.GetNickname(); valid {
|
|
result.addNickname(nickname)
|
|
}
|
|
if phoneNumber, valid := model.GetPhoneNumber(); valid {
|
|
result.addPhoneNumber(phoneNumber)
|
|
}
|
|
if idNumber, valid := model.GetIDNumber(); valid {
|
|
result.addIDNumber(idNumber)
|
|
}
|
|
if qqNumber, valid := model.GetQQNumber(); valid {
|
|
result.addQQNumber(qqNumber)
|
|
}
|
|
if password, valid := model.GetPassword(); valid {
|
|
result.addPassword(password)
|
|
}
|
|
if email, valid := model.GetEmail(); valid {
|
|
result.addEmail(email)
|
|
}
|
|
if address, valid := model.GetAddress(); valid {
|
|
result.addAddress(address)
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) queryPhoneNumber(databases []database.Database, phoneNumber int64) error {
|
|
for _, db := range databases {
|
|
models, err := db.QueryByPhoneNumber(context.Background(), phoneNumber)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, model := range models {
|
|
result.addModel(model)
|
|
}
|
|
}
|
|
result.PhoneNumbers[PhoneNumber(phoneNumber)] = true
|
|
return nil
|
|
}
|
|
|
|
func (result *QueryResult) queryIDNumber(databases []database.Database, idNumber string) error {
|
|
for _, db := range databases {
|
|
models, err := db.QueryByIDNumber(context.Background(), idNumber)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, model := range models {
|
|
result.addModel(model)
|
|
}
|
|
}
|
|
result.IDNumbers[IDNumber(idNumber)] = true
|
|
return nil
|
|
}
|
|
|
|
func (result *QueryResult) queryQQNumber(databases []database.Database, qqNumber int64) error {
|
|
for _, db := range databases {
|
|
models, err := db.QueryByQQNumber(context.Background(), qqNumber)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, model := range models {
|
|
result.addModel(model)
|
|
}
|
|
}
|
|
result.QQNumbers[QQNumber(qqNumber)] = true
|
|
return nil
|
|
}
|
|
|
|
func (result *QueryResult) queryEmail(databases []database.Database, email string) error {
|
|
for _, db := range databases {
|
|
models, err := db.QueryByEmail(context.Background(), email)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
for _, model := range models {
|
|
result.addModel(model)
|
|
}
|
|
}
|
|
result.Emails[Email(email)] = true
|
|
return nil
|
|
}
|
|
|
|
func (result *QueryResult) addName(value string) {
|
|
if value == "" {
|
|
return
|
|
}
|
|
name := Name(value)
|
|
if _, ok := result.Names[name]; !ok {
|
|
result.Names[name] = false
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) addNickname(value string) {
|
|
if value == "" {
|
|
return
|
|
}
|
|
nickname := Nickname(value)
|
|
if _, ok := result.Nicknames[nickname]; !ok {
|
|
result.Nicknames[nickname] = false
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) addPhoneNumber(value int64) {
|
|
if value == 0 {
|
|
return
|
|
}
|
|
phoneNumber := PhoneNumber(value)
|
|
if _, ok := result.PhoneNumbers[phoneNumber]; !ok {
|
|
result.PhoneNumbers[phoneNumber] = false
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) addIDNumber(value string) {
|
|
if value == "" {
|
|
return
|
|
}
|
|
idNumber := IDNumber(value)
|
|
if _, ok := result.IDNumbers[idNumber]; !ok {
|
|
result.IDNumbers[idNumber] = false
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) addQQNumber(value int64) {
|
|
if value == 0 {
|
|
return
|
|
}
|
|
qqNumber := QQNumber(value)
|
|
if _, ok := result.QQNumbers[qqNumber]; !ok {
|
|
result.QQNumbers[qqNumber] = false
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) addPassword(value string) {
|
|
if value == "" {
|
|
return
|
|
}
|
|
password := Password(value)
|
|
if _, ok := result.Passwords[password]; !ok {
|
|
result.Passwords[password] = false
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) addEmail(value string) {
|
|
if value == "" {
|
|
return
|
|
}
|
|
email := Email(value)
|
|
if _, ok := result.Emails[email]; !ok {
|
|
result.Emails[email] = false
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) addAddress(value string) {
|
|
if value == "" {
|
|
return
|
|
}
|
|
address := Address(value)
|
|
if _, ok := result.Addresses[address]; !ok {
|
|
result.Addresses[address] = false
|
|
}
|
|
}
|
|
|
|
func (result *QueryResult) Build(mask bool) *QueryResponse {
|
|
response := NewQueryResponse()
|
|
for name := range result.Names {
|
|
result := name.String()
|
|
if mask {
|
|
result = name.Masking()
|
|
}
|
|
response.Names = append(response.Names, result)
|
|
}
|
|
for nickname := range result.Nicknames {
|
|
result := nickname.String()
|
|
if mask {
|
|
result = nickname.Masking()
|
|
}
|
|
response.Nicknames = append(response.Nicknames, result)
|
|
}
|
|
for phoneNumber := range result.PhoneNumbers {
|
|
result := phoneNumber.String()
|
|
if mask {
|
|
result = phoneNumber.Masking()
|
|
}
|
|
response.PhoneNumbers = append(response.PhoneNumbers, result)
|
|
}
|
|
for idNumber := range result.IDNumbers {
|
|
result := idNumber.String()
|
|
if mask {
|
|
result = idNumber.Masking()
|
|
}
|
|
response.IDNumbers = append(response.IDNumbers, result)
|
|
}
|
|
for qqNumber := range result.QQNumbers {
|
|
result := qqNumber.String()
|
|
if mask {
|
|
result = qqNumber.Masking()
|
|
}
|
|
response.QQNumbers = append(response.QQNumbers, result)
|
|
}
|
|
for password := range result.Passwords {
|
|
result := password.String()
|
|
if mask {
|
|
result = password.Masking()
|
|
}
|
|
response.Passwords = append(response.Passwords, result)
|
|
}
|
|
for email := range result.Emails {
|
|
result := email.String()
|
|
if mask {
|
|
result = email.Masking()
|
|
}
|
|
response.Emails = append(response.Emails, result)
|
|
}
|
|
for address := range result.Addresses {
|
|
result := address.String()
|
|
if mask {
|
|
result = address.Masking()
|
|
}
|
|
response.Addresses = append(response.Addresses, result)
|
|
}
|
|
return response
|
|
}
|