update response

This commit is contained in:
2024-09-19 14:22:30 +07:00
parent 377f45f5a9
commit 563b822ce5
4 changed files with 98 additions and 10 deletions

View File

@@ -1,6 +1,10 @@
package docs
import (
"crypto/aes"
"crypto/cipher"
"crypto/sha256"
"encoding/base64"
"errors"
"math"
"unicode/utf8"
@@ -109,3 +113,71 @@ func DecompressFromEncodedUriComponent(input string) (string, error) {
return "", errors.New("Unexpected end of buffer reached.")
}
func StringDecrypt(key string, str string) string {
// hash
keyHash := sha256.Sum256([]byte(key))
// iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
iv := keyHash[:16]
// create a new aes cipher using the key and iv
block, err := aes.NewCipher(keyHash[:32])
if err != nil {
panic(err)
}
// decode the base64 string to a []byte
ciphertext, _ := base64.StdEncoding.DecodeString(str)
// create the decrypter
decrypter := cipher.NewCBCDecrypter(block, iv)
// decrypt
decrypted := make([]byte, len(ciphertext))
decrypter.CryptBlocks(decrypted, ciphertext)
// remove padding
padLen := int(decrypted[len(decrypted)-1])
decrypted = decrypted[:len(decrypted)-padLen]
return string(decrypted)
}
func ResponseVclaim(encrypted string, key string) (string, error) {
cipherText, err := base64.StdEncoding.DecodeString(encrypted)
if err != nil {
return "", err
}
hash := sha256.Sum256([]byte(key))
block, err := aes.NewCipher(hash[:])
if err != nil {
return "", err
}
if len(cipherText) < aes.BlockSize {
return "", errors.New("cipherText too short")
}
iv := hash[:aes.BlockSize]
if len(cipherText)%aes.BlockSize != 0 {
return "", errors.New("cipherText is not a multiple of the block size")
}
mode := cipher.NewCBCDecrypter(block, iv)
mode.CryptBlocks(cipherText, cipherText)
// cipherText, _ = pkcs7.Unpad(cipherText, aes.BlockSize)
cipherText, _ = Unpad(cipherText, aes.BlockSize)
// data, err := lzstring.DecompressFromEncodedURIComponent(string(cipherText))
data, err := DecompressFromEncodedUriComponent(string(cipherText))
if err != nil {
return "", err
}
return data, nil
}

View File

@@ -1,13 +1,16 @@
package bpjs
import (
"bridging-rssa/docs"
"bridging-rssa/models/jadwal_dokter"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
)
func BPJSGetResponse(url string, cons_id string, User_keys string, tstamp string, X_signature string, kdPoly string, tanggal string, headers map[string]string) (string, error) {
func BPJSGetResponse(url string, secretKey string, cons_id string, User_keys string, tstamp string, X_signature string, kdPoly string, tanggal string, headers map[string]string) (string, error) {
param := "/jadwaldokter/kodepoli/" + kdPoly + "/tanggal/" + tanggal
url += param
log.Println("URL", url)
@@ -22,18 +25,29 @@ func BPJSGetResponse(url string, cons_id string, User_keys string, tstamp string
log.Println("REQ", req.Header)
client := http.Client{}
response, err := client.Get(url)
response, err := client.Do(req)
if err != nil {
log.Fatalf("Error making external API request: %v", err)
}
log.Println("RESPONSE: ", response)
key := cons_id + secretKey + tstamp
res, err := io.ReadAll(response.Body)
if err != nil {
fmt.Println(err)
}
log.Println("res: ", res)
var jadwalDokter jadwal_dokter.JadwalDokter
err = json.Unmarshal([]byte(res), &jadwalDokter)
if err != nil {
log.Fatalf("Error Unmarshaling: %v", err)
}
log.Println("RESPONSE DATA", jadwalDokter.Response)
dataResp, err := docs.ResponseVclaim(jadwalDokter.Response, key)
if err != nil {
log.Fatalf("Error Unmarshaling: %v", err)
}
log.Println("res: ", dataResp)
return string(res), nil
}
}

View File

@@ -32,7 +32,7 @@ func GetJadwalDokter(c *gin.Context) {
}
log.Println("Headers : ", headers)
res, err := bpjs.BPJSGetResponse(url, cons_id, User_key, tstamp, X_signature, kdPoly, tanggal, headers)
res, err := bpjs.BPJSGetResponse(url, conf.Secret_key, cons_id, User_key, tstamp, X_signature, kdPoly, tanggal, headers)
if err != nil {
log.Fatalf("Error making external API request: %v", err)
}

View File

@@ -1,11 +1,13 @@
package jadwal_dokter
type JadwalDokter struct {
Response struct {
List []ListDokter `json:"list"`
} `json:"response"`
MetaData struct {
} `json:"metadata"`
Response string `json:"response"`
MetaData Metadata `json:"metadata"`
}
type Metadata struct {
Code int `json:"code"`
Message string `json:"message"`
}
type ListDokter struct {