package web12import (3"github.com/gin-gonic/gin"4"github.com/sundowndev/phoneinfoga/v2/build"5"github.com/sundowndev/phoneinfoga/v2/lib/number"6"github.com/sundowndev/phoneinfoga/v2/lib/remote"7"github.com/sundowndev/phoneinfoga/v2/lib/remote/suppliers"8"github.com/sundowndev/phoneinfoga/v2/web/errors"9"net/http"10)1112type ScanResultResponse struct {13JSONResponse14Result interface{} `json:"result"`15}1617type getAllNumbersResponse struct {18JSONResponse19Numbers []number.Number `json:"numbers"`20}2122type healthResponse struct {23Success bool `json:"success"`24Version string `json:"version"`25Commit string `json:"commit"`26Demo bool `json:"demo"`27}2829// @ID getAllNumbers30// @Tags Numbers31// @Summary Fetch all previously scanned numbers.32// @Description This route is actually not used yet.33// @Deprecated34// @Produce json35// @Success 200 {object} getAllNumbersResponse36// @Router /numbers [get]37func getAllNumbers(c *gin.Context) {38c.JSON(http.StatusOK, getAllNumbersResponse{39JSONResponse: JSONResponse{Success: true},40Numbers: []number.Number{},41})42}4344// @ID validate45// @Tags Numbers46// @Summary Check if a number is valid and possible.47// @Produce json48// @Deprecated49// @Success 200 {object} JSONResponse50// @Success 400 {object} JSONResponse51// @Router /numbers/{number}/validate [get]52// @Param number path string true "Input phone number" validate(required)53func validate(c *gin.Context) {54_, err := number.NewNumber(c.Param("number"))55if err != nil {56handleError(c, errors.NewBadRequest(err))57return58}59c.JSON(http.StatusOK, successResponse("The number is valid"))60}6162// @ID localScan63// @Tags Numbers64// @Summary Perform a scan using local phone number library.65// @Produce json66// @Deprecated67// @Success 200 {object} ScanResultResponse{result=number.Number}68// @Success 400 {object} JSONResponse69// @Router /numbers/{number}/scan/local [get]70// @Param number path string true "Input phone number" validate(required)71func localScan(c *gin.Context) {72num, err := number.NewNumber(c.Param("number"))73if err != nil {74handleError(c, errors.NewBadRequest(err))75return76}7778result, err := remote.NewLocalScanner().Run(*num, make(remote.ScannerOptions))79if err != nil {80handleError(c, errors.NewInternalError(err))81return82}8384c.JSON(http.StatusOK, ScanResultResponse{85JSONResponse: JSONResponse{Success: true},86Result: result,87})88}8990// @ID numverifyScan91// @Tags Numbers92// @Summary Perform a scan using Numverify's API.93// @Deprecated94// @Produce json95// @Success 200 {object} ScanResultResponse{result=remote.NumverifyScannerResponse}96// @Success 400 {object} JSONResponse97// @Router /numbers/{number}/scan/numverify [get]98// @Param number path string true "Input phone number" validate(required)99func numverifyScan(c *gin.Context) {100num, err := number.NewNumber(c.Param("number"))101if err != nil {102handleError(c, errors.NewBadRequest(err))103return104}105106result, err := remote.NewNumverifyScanner(suppliers.NewNumverifySupplier()).Run(*num, make(remote.ScannerOptions))107if err != nil {108handleError(c, errors.NewInternalError(err))109return110}111112c.JSON(http.StatusOK, ScanResultResponse{113JSONResponse: JSONResponse{Success: true},114Result: result,115})116}117118// @ID googleSearchScan119// @Tags Numbers120// @Summary Perform a scan using Google Search engine.121// @Deprecated122// @Produce json123// @Success 200 {object} ScanResultResponse{result=remote.GoogleSearchResponse}124// @Success 400 {object} JSONResponse125// @Router /numbers/{number}/scan/googlesearch [get]126// @Param number path string true "Input phone number" validate(required)127func googleSearchScan(c *gin.Context) {128num, err := number.NewNumber(c.Param("number"))129if err != nil {130handleError(c, errors.NewBadRequest(err))131return132}133134result, err := remote.NewGoogleSearchScanner().Run(*num, make(remote.ScannerOptions))135if err != nil {136handleError(c, errors.NewInternalError(err))137return138}139140c.JSON(http.StatusOK, ScanResultResponse{141JSONResponse: JSONResponse{Success: true},142Result: result,143})144}145146// @ID ovhScan147// @Tags Numbers148// @Summary Perform a scan using OVH's API.149// @Deprecated150// @Produce json151// @Success 200 {object} ScanResultResponse{result=remote.OVHScannerResponse}152// @Success 400 {object} JSONResponse153// @Router /numbers/{number}/scan/ovh [get]154// @Param number path string true "Input phone number" validate(required)155func ovhScan(c *gin.Context) {156num, err := number.NewNumber(c.Param("number"))157if err != nil {158handleError(c, errors.NewBadRequest(err))159return160}161162result, err := remote.NewOVHScanner(suppliers.NewOVHSupplier()).Run(*num, make(remote.ScannerOptions))163if err != nil {164handleError(c, errors.NewInternalError(err))165return166}167168c.JSON(http.StatusOK, ScanResultResponse{169JSONResponse: JSONResponse{Success: true},170Result: result,171})172}173174// @ID healthCheck175// @Tags General176// @Summary Check if service is healthy.177// @Produce json178// @Success 200 {object} healthResponse179// @Success 500 {object} JSONResponse180// @Router / [get]181func healthHandler(c *gin.Context) {182c.JSON(http.StatusOK, healthResponse{183Success: true,184Version: build.Version,185Commit: build.Commit,186Demo: build.IsDemo(),187})188}189190191