privacy/server/service/handler.go
2020-11-28 18:50:30 +08:00

88 lines
2.1 KiB
Go

package service
import (
"github.com/labstack/echo/v4"
)
type QueryResponse struct {
Names []string `json:"names"`
Nicknames []string `json:"nicknames"`
PhoneNumbers []string `json:"phone_numbers"`
IDNumbers []string `json:"id_numbers"`
QQNumbers []string `json:"qq_numbers"`
Passwords []string `json:"passwords"`
Emails []string `json:"emails"`
Addresses []string `json:"addresses"`
}
func NewQueryResponse() *QueryResponse {
return &QueryResponse{
Names: make([]string, 0),
Nicknames: make([]string, 0),
PhoneNumbers: make([]string, 0),
IDNumbers: make([]string, 0),
QQNumbers: make([]string, 0),
Passwords: make([]string, 0),
Emails: make([]string, 0),
Addresses: make([]string, 0),
}
}
func (svc *Service) queryHandlerFunc(ctx echo.Context) error {
value := ctx.QueryParam("value")
if value == "" {
return InvalidParameterError
}
result := NewQueryResult()
types := whatType(value)
for _, t := range types {
switch value := t.(type) {
case QQNumber:
result.addQQNumber(int64(value))
case PhoneNumber:
result.addPhoneNumber(int64(value))
case Email:
result.addEmail(string(value))
case IDNumber:
result.addIDNumber(string(value))
}
}
ok := false
for !ok {
for qqNumber, checked := range result.QQNumbers {
if !checked {
if err := result.queryQQNumber(svc.databases, int64(qqNumber)); err != nil {
return err
}
}
continue
}
for phoneNumber, checked := range result.PhoneNumbers {
if !checked {
if err := result.queryPhoneNumber(svc.databases, int64(phoneNumber)); err != nil {
return err
}
}
continue
}
for idNumber, checked := range result.IDNumbers {
if !checked {
if err := result.queryIDNumber(svc.databases, string(idNumber)); err != nil {
return err
}
}
continue
}
for email, checked := range result.Emails {
if !checked {
if err := result.queryEmail(svc.databases, string(email)); err != nil {
return err
}
}
continue
}
ok = true
}
return NewResponse(ctx, nil, result.Build(svc.config.Mask))
}