update response
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user