package web
import (
"github.com/gin-gonic/gin"
"github.com/sundowndev/phoneinfoga/v2/build"
"github.com/sundowndev/phoneinfoga/v2/lib/number"
"github.com/sundowndev/phoneinfoga/v2/lib/remote"
"github.com/sundowndev/phoneinfoga/v2/lib/remote/suppliers"
"github.com/sundowndev/phoneinfoga/v2/web/errors"
"net/http"
)
type ScanResultResponse struct {
JSONResponse
Result interface{} `json:"result"`
}
type getAllNumbersResponse struct {
JSONResponse
Numbers []number.Number `json:"numbers"`
}
type healthResponse struct {
Success bool `json:"success"`
Version string `json:"version"`
Commit string `json:"commit"`
Demo bool `json:"demo"`
}
func getAllNumbers(c *gin.Context) {
c.JSON(http.StatusOK, getAllNumbersResponse{
JSONResponse: JSONResponse{Success: true},
Numbers: []number.Number{},
})
}
func validate(c *gin.Context) {
_, err := number.NewNumber(c.Param("number"))
if err != nil {
handleError(c, errors.NewBadRequest(err))
return
}
c.JSON(http.StatusOK, successResponse("The number is valid"))
}
func localScan(c *gin.Context) {
num, err := number.NewNumber(c.Param("number"))
if err != nil {
handleError(c, errors.NewBadRequest(err))
return
}
result, err := remote.NewLocalScanner().Run(*num, make(remote.ScannerOptions))
if err != nil {
handleError(c, errors.NewInternalError(err))
return
}
c.JSON(http.StatusOK, ScanResultResponse{
JSONResponse: JSONResponse{Success: true},
Result: result,
})
}
func numverifyScan(c *gin.Context) {
num, err := number.NewNumber(c.Param("number"))
if err != nil {
handleError(c, errors.NewBadRequest(err))
return
}
result, err := remote.NewNumverifyScanner(suppliers.NewNumverifySupplier()).Run(*num, make(remote.ScannerOptions))
if err != nil {
handleError(c, errors.NewInternalError(err))
return
}
c.JSON(http.StatusOK, ScanResultResponse{
JSONResponse: JSONResponse{Success: true},
Result: result,
})
}
func googleSearchScan(c *gin.Context) {
num, err := number.NewNumber(c.Param("number"))
if err != nil {
handleError(c, errors.NewBadRequest(err))
return
}
result, err := remote.NewGoogleSearchScanner().Run(*num, make(remote.ScannerOptions))
if err != nil {
handleError(c, errors.NewInternalError(err))
return
}
c.JSON(http.StatusOK, ScanResultResponse{
JSONResponse: JSONResponse{Success: true},
Result: result,
})
}
func ovhScan(c *gin.Context) {
num, err := number.NewNumber(c.Param("number"))
if err != nil {
handleError(c, errors.NewBadRequest(err))
return
}
result, err := remote.NewOVHScanner(suppliers.NewOVHSupplier()).Run(*num, make(remote.ScannerOptions))
if err != nil {
handleError(c, errors.NewInternalError(err))
return
}
c.JSON(http.StatusOK, ScanResultResponse{
JSONResponse: JSONResponse{Success: true},
Result: result,
})
}
func healthHandler(c *gin.Context) {
c.JSON(http.StatusOK, healthResponse{
Success: true,
Version: build.Version,
Commit: build.Commit,
Demo: build.IsDemo(),
})
}