| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 | package mainimport (	"crypto/sha256"	"encoding/json"	"fmt"	"io/ioutil"	"net/http"	"strconv"	"strings"	"time"	"github.com/dgrijalva/jwt-go"	"github.com/labstack/echo")type billing struct {}func (b billing) list(c echo.Context) error {	type InvoiceLists struct {		Embedded struct {			IaaSInvoices []struct {				CreatedAt       time.Time `json:"createdAt"`				UpdatedAt       time.Time `json:"updatedAt"`				UUID            string    `json:"uuid"`				CustomerID      string    `json:"customerId"`				Plan            string    `json:"plan"`				DurationDay     int       `json:"durationDay"`				VcoreQuantity   int       `json:"vcoreQuantity"`				VcoreCost       float64   `json:"vcoreCost"`				RAMQuantity     int       `json:"ramQuantity"`				RAMCost         float64   `json:"ramCost"`				StorageQuantity int       `json:"storageQuantity"`				StorageCost     float64   `json:"storageCost"`				ExtraIPCount    int       `json:"extraIpCount"`				ExtraIPCost     float64   `json:"extraIpCost"`				ExtraBwQuantity int       `json:"extraBwQuantity"`				ExtraBwCost     float64   `json:"extraBwCost"`				Sum             float64   `json:"sum"`				Links           struct {					Self struct {						Href string `json:"href"`					} `json:"self"`					IaaSInvoice struct {						Href string `json:"href"`					} `json:"iaaSInvoice"`				} `json:"_links"`			} `json:"iaaSInvoices"`		} `json:"_embedded"`		Links struct {			Self struct {				Href string `json:"href"`			} `json:"self"`		} `json:"_links"`	}	type InvoiceListsResponse struct {		Data []struct {			SUM          float64   `json:"sum"`			PaidState    bool      `json:"paidstate"`			DueDate      time.Time `json:"duedate"`			RemainedDays int64     `json:"remaineddays"`			InvoiceUUID  string    `json:"invoiceUUID"`		} `json:"data"`		Message string `json:"message"`		Origin  string `json:"origin"`		Code    int    `json:"code"`	}	user := c.Get("user").(*jwt.Token)	claims := user.Claims.(jwt.MapClaims)	_sha256 := sha256.Sum256([]byte(string(claims["name"].(string))))	var hashChannel_ = make(chan []byte, 1)	hashChannel_ <- _sha256[:]	token := decrypt(<-hashChannel_, claims["IPAToken"].(string))	_BA := strings.Split(token, ";")	BA := _BA[len(_BA)-2]	UserUUID := login(BA).AuthenticatedUser.ID	url := "http://172.20.15.24/iaaSInvoices/search/findByCustomerIdEquals?customerId=" + UserUUID	method := "GET"	client := &http.Client{}	req, err := http.NewRequest(method, url, nil)	if err != nil {		fmt.Println(err)		return nil	}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return nil	}	defer res.Body.Close()	body, err := ioutil.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return nil	}	//fmt.Println(string(body))	_InvoiceList := InvoiceLists{}	err = json.Unmarshal(body, &_InvoiceList)	if err != nil {		fmt.Println(err)		//return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice	}	//fmt.Println("Length: ", len(_InvoiceList.Embedded.IaaSInvoices))	_InvoiceListsResponse := InvoiceListsResponse{		Data:    nil,		Message: "Done",		Origin:  "Billing-listInvoices",		Code:    1000,	}	_Data := _InvoiceListsResponse.Data	x := struct {		SUM          float64   `json:"sum"`		PaidState    bool      `json:"paidstate"`		DueDate      time.Time `json:"duedate"`		RemainedDays int64     `json:"remaineddays"`		InvoiceUUID  string    `json:"invoiceUUID"`	}{}	y := x	for _, i := range _InvoiceList.Embedded.IaaSInvoices {		y.SUM = i.Sum		y.InvoiceUUID = i.UUID		y.PaidState = false		y.DueDate = i.CreatedAt		y.RemainedDays = (i.CreatedAt.Unix() - time.Now().Unix()) / 3600 / 24		_Data = append(_Data, y)	}	//fmt.Println("length of data: ",len(_Data))	_InvoiceListsResponse.Data = _Data	return c.JSON(http.StatusOK, _InvoiceListsResponse)}func (b billing) Show(c echo.Context) error {	type Invoice struct {		CreatedAt       time.Time `json:"createdAt"`		UpdatedAt       time.Time `json:"updatedAt"`		ID              int       `json:"id"`		UUID            string    `json:"uuid"`		CustomerID      string    `json:"customerId"`		Plan            string    `json:"plan"`		DurationDay     int       `json:"durationDay"`		VcoreQuantity   int       `json:"vcoreQuantity"`		VcoreCost       float64   `json:"vcoreCost"`		RAMQuantity     int       `json:"ramQuantity"`		RAMCost         float64   `json:"ramCost"`		StorageQuantity int       `json:"storageQuantity"`		StorageCost     float64   `json:"storageCost"`		ExtraIPCount    int       `json:"extraIpCount"`		ExtraIPCost     float64   `json:"extraIpCost"`		ExtraBwQuantity int       `json:"extraBwQuantity"`		ExtraBwCost     float64   `json:"extraBwCost"`		Sum             float64   `json:"sum"`	}	type InvoiceResponse struct {		Data struct {			CreatedAt       time.Time `json:"createdAt"`			UpdatedAt       time.Time `json:"updatedAt"`			ID              int       `json:"id"`			UUID            string    `json:"uuid"`			CustomerID      string    `json:"customerId"`			Plan            string    `json:"plan"`			DurationDay     int       `json:"durationDay"`			VcoreQuantity   int       `json:"vcoreQuantity"`			VcoreCost       float64   `json:"vcoreCost"`			RAMQuantity     int       `json:"ramQuantity"`			RAMCost         float64   `json:"ramCost"`			StorageQuantity int       `json:"storageQuantity"`			StorageCost     float64   `json:"storageCost"`			ExtraIPCount    int       `json:"extraIpCount"`			ExtraIPCost     float64   `json:"extraIpCost"`			ExtraBwQuantity int       `json:"extraBwQuantity"`			ExtraBwCost     float64   `json:"extraBwCost"`			Sum             float64   `json:"sum"`		} `json:"data"`		Message string `json:"message"`		Origin  string `json:"origin"`		Code    int    `json:"code"`	}	user := c.Get("user").(*jwt.Token)	claims := user.Claims.(jwt.MapClaims)	_sha256 := sha256.Sum256([]byte(string(claims["name"].(string))))	var hashChannel_ = make(chan []byte, 1)	hashChannel_ <- _sha256[:]	token := decrypt(<-hashChannel_, claims["IPAToken"].(string))	_BA := strings.Split(token, ";")	BA := _BA[len(_BA)-2]	UserUUID := login(BA).AuthenticatedUser.ID	InvoiceUUID := c.FormValue("InvoiceUUID")	url := "http://172.20.15.24/invoice/iaas/get?uuid=" + InvoiceUUID	method := "GET"	client := &http.Client{}	req, err := http.NewRequest(method, url, nil)	if InvoiceUUID == "556a5032-09de-4430-b1e1-48a2ef84d62f" {		_Invoice := Invoice{			CreatedAt:       time.Time{},			UpdatedAt:       time.Time{},			ID:              0,			UUID:            UserUUID,			CustomerID:      "xxx",			Plan:            "12",			DurationDay:     100,			VcoreQuantity:   100,			VcoreCost:       100,			RAMQuantity:     100,			RAMCost:         100,			StorageQuantity: 100,			StorageCost:     100,			ExtraIPCount:    100,			ExtraIPCost:     100,			ExtraBwQuantity: 100,			ExtraBwCost:     100,			Sum:             100,		}		fake_InvoiceResponse := InvoiceResponse{			Data:    _Invoice,			Message: "Done",			Origin:  "Billing-ShowInvoice",			Code:    1000,		}		return c.JSON(http.StatusOK, fake_InvoiceResponse)	}	if err != nil {		fmt.Println(err)		return nil	}	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return nil	}	defer res.Body.Close()	body, err := ioutil.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return nil	}	_Invoice := Invoice{}	err = json.Unmarshal(body, &_Invoice)	if err != nil {		fmt.Println(err)		//return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice	}	if _Invoice.CustomerID != UserUUID {		resp := _response{			Origin:  "Billing-ShowInvoice",			Message: "Unauthorized Access",			Code:    1001,		}		return c.JSON(403, resp)	}	_InvoiceResponse := InvoiceResponse{		Data:    _Invoice,		Message: "Done",		Origin:  "Billing-ShowInvoice",		Code:    1000,	}	return c.JSON(http.StatusOK, _InvoiceResponse)}func IaaSCreate(UserUUID string, period string, CPU string, memory string, storageVolume string, extraIP string, extraBW string, isTransient bool, coupon int) (CPUPrice float64, memPrice float64, StoragePrice float64, IPPrice float64, extraBWPrice float64, sum float64, sumRaw float64, InvoiceID string) {	type CreateResponse struct {		CreatedAt       time.Time `json:"createdAt"`		UpdatedAt       time.Time `json:"updatedAt"`		ID              int       `json:"id"`		UUID            string    `json:"uuid"`		CustomerID      string    `json:"customerId"`		Plan            string    `json:"plan"`		DurationDay     int       `json:"durationDay"`		VcoreQuantity   int       `json:"vcoreQuantity"`		VcoreCost       float64   `json:"vcoreCost"`		RAMQuantity     int       `json:"ramQuantity"`		RAMCost         float64   `json:"ramCost"`		StorageQuantity int       `json:"storageQuantity"`		StorageCost     float64   `json:"storageCost"`		ExtraIPCount    int       `json:"extraIpCount"`		ExtraIPCost     float64   `json:"extraIpCost"`		ExtraBwQuantity int       `json:"extraBwQuantity"`		ExtraBwCost     float64   `json:"extraBwCost"`		Sum             float64   `json:"sum"`		SumRaw          float64   `json:"SumRaw"`	}	url := "http://172.20.15.24:80/invoice/iaas/create"	method := "POST"	_period, _ := strconv.Atoi(period)	_CPU, _ := strconv.Atoi(CPU)	_memory, _ := strconv.Atoi(memory)	_storageVolume, _ := strconv.Atoi(storageVolume)	_extraIP, _ := strconv.Atoi(extraIP)	_extraBW, _ := strconv.Atoi(extraBW)	payload := strings.NewReader(fmt.Sprintf(`{    "customerId": "%s",    "durationDay": "%d",    "vCoreCount": "%d",    "ramVolume": "%d",    "storageVolume": "%d",    "extraIPCount": "%d",    "extraBW": "%d",	  "isTransient": %t,		"coupon":"%d"}`, UserUUID, _period*30, _CPU, _memory/1024/1024/1024, _storageVolume/1024/1024/1024, _extraIP, _extraBW, isTransient, coupon))	//}`, UserUUID, _period*30, _CPU, _memory/1024/1024/1024, _storageVolume/1024/1024/1024, _extraIP, _extraBW))	//fmt.Println("Mem1 :",memory," Mem2:",_memory,"Array: ",payload)	client := &http.Client{}	req, err := http.NewRequest(method, url, payload)	if err != nil {		fmt.Println(err)		return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice, sum, sumRaw, InvoiceID	}	req.Header.Add("Content-Type", "application/json")	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice, sum, sumRaw, InvoiceID	}	defer res.Body.Close()	body, err := ioutil.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice, sum, sumRaw, InvoiceID	}	//fmt.Println(string(body))	//return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice	_CreateResponse := CreateResponse{}	err = json.Unmarshal(body, &_CreateResponse)	if err != nil {		fmt.Println(err)		//return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice	}	CPUPrice = _CreateResponse.VcoreCost	memPrice = _CreateResponse.RAMCost	extraBWPrice = _CreateResponse.ExtraBwCost	IPPrice = _CreateResponse.ExtraIPCost	StoragePrice = _CreateResponse.StorageCost	return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice, _CreateResponse.Sum, _CreateResponse.SumRaw, _CreateResponse.UUID}func IaaSEdit(UserUUID string, period string, CPU string, memory string, storageVolume string, extraIP string, extraBW string, isTransient bool, coupon int, vmUUID string) (CPUPrice float64, memPrice float64, StoragePrice float64, IPPrice float64, extraBWPrice float64, sum float64, sumRaw float64, InvoiceID string) {	type EditResponse struct {		CreatedAt       time.Time `json:"createdAt"`		UpdatedAt       time.Time `json:"updatedAt"`		ID              int       `json:"id"`		UUID            string    `json:"uuid"`		CustomerID      string    `json:"customerId"`		Plan            string    `json:"plan"`		DurationDay     int       `json:"durationDay"`		VcoreQuantity   int       `json:"vcoreQuantity"`		VcoreCost       float64   `json:"vcoreCost"`		RAMQuantity     int       `json:"ramQuantity"`		RAMCost         float64   `json:"ramCost"`		StorageQuantity int       `json:"storageQuantity"`		StorageCost     float64   `json:"storageCost"`		ExtraIPCount    int       `json:"extraIpCount"`		ExtraIPCost     float64   `json:"extraIpCost"`		ExtraBwQuantity int       `json:"extraBwQuantity"`		ExtraBwCost     float64   `json:"extraBwCost"`		Sum             float64   `json:"sum"`		SumRaw          float64   `json:"SumRaw"`	}	url := "http://172.20.15.24:80/invoice/iaas/edit"	method := "POST"	_period, _ := strconv.Atoi(period)	_CPU, _ := strconv.Atoi(CPU)	_memory, _ := strconv.Atoi(memory)	_storageVolume, _ := strconv.Atoi(storageVolume)	_extraIP, _ := strconv.Atoi(extraIP)	_extraBW, _ := strconv.Atoi(extraBW)	payload := strings.NewReader(fmt.Sprintf(`{  "customerId": "%s",  "newRequest": {    "coupon": "%d",    "customerId": "%s",    "durationDay": "%d",    "extraBW": "%d",    "extraIPCount": "%d",    "isTransient": %t,    "previousRemainingCredit": 0,    "ramVolume": "%d",    "storageVolume": "%d",    "vCoreCount": "%d"   },  "serviceUUID": "%s"}`, UserUUID, coupon, UserUUID, _period*30, _extraBW, _extraIP, isTransient, _memory/1024/1024/1024, _storageVolume/1024/1024/1024, _CPU, vmUUID))	//}`, UserUUID, _period*30, _CPU, _memory/1024/1024/1024, _storageVolume/1024/1024/1024, _extraIP, _extraBW))	//fmt.Println("Mem1 :",memory," Mem2:",_memory,"Array: ",payload)	client := &http.Client{}	req, err := http.NewRequest(method, url, payload)	if err != nil {		fmt.Println(err)		return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice, sum, sumRaw, InvoiceID	}	req.Header.Add("Content-Type", "application/json")	res, err := client.Do(req)	if err != nil {		fmt.Println(err)		return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice, sum, sumRaw, InvoiceID	}	defer res.Body.Close()	body, err := ioutil.ReadAll(res.Body)	if err != nil {		fmt.Println(err)		return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice, sum, sumRaw, InvoiceID	}	//fmt.Println(string(body))	//return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice	_EditResponse := EditResponse{}	err = json.Unmarshal(body, &_EditResponse)	if err != nil {		fmt.Println(err)		//return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice	}	CPUPrice = _EditResponse.VcoreCost	memPrice = _EditResponse.RAMCost	extraBWPrice = _EditResponse.ExtraBwCost	IPPrice = _EditResponse.ExtraIPCost	StoragePrice = _EditResponse.StorageCost	fmt.Println(CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice, _EditResponse.Sum, _EditResponse.SumRaw, _EditResponse.UUID)	return CPUPrice, memPrice, StoragePrice, IPPrice, extraBWPrice, _EditResponse.Sum, _EditResponse.SumRaw, _EditResponse.UUID}
 |