package vclaim import ( "bridging-rssa/docs" "bridging-rssa/models/config" "crypto/aes" "crypto/cipher" "crypto/sha256" "encoding/base64" "encoding/json" "errors" "io" "log" "net/http" vclaim "bridging-rssa/models/bpjs/v_claim" lzstring "github.com/daku10/go-lz-string" ) 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 = docs.RemovePKCS7Padding(cipherText) data, err := lzstring.DecompressFromEncodedURIComponent(string(cipherText)) // data, err := helper.DecompressFromEncodedUriComponent(string(cipherText)) if err != nil { return "", err } return data, nil } func ResponseGetReferensiDokter(url string, header *config.Header, headers map[string]string) (*vclaim.ResponseGetReferensiDokter, error) { log.Println("URL", url) req, err := http.NewRequest("GET", url, nil) if err != nil { log.Printf("Error creating request: %v", err) return nil, err } for key, value := range headers { req.Header.Set(key, value) } log.Println("REQ", req.Header) client := http.Client{} response, err := client.Do(req) if err != nil { log.Printf("Error making external API request: %v", err) } log.Println("RESPONSE: ", response) key := header.ConsID + header.SecretKey + header.TimeStamp res, err := io.ReadAll(response.Body) if err != nil { log.Println(err) return nil, err } var resReferensiDotker vclaim.ResponseGetReferensiDokterRaw err = json.Unmarshal([]byte(string(res)), &resReferensiDotker) if err != nil { log.Printf("Error Unmarshaling: %v", err) return nil, err } responses := &vclaim.ResponseGetReferensiDokter{} if resReferensiDotker.MetaData.Code != "200" { errMsg := errors.New(resReferensiDotker.MetaData.Message) log.Printf("error : %v", errMsg) responses.MetaData.Code = resReferensiDotker.MetaData.Code responses.MetaData.Message = resReferensiDotker.MetaData.Message log.Println("responses: ", responses) return responses, errMsg } dataResp, err := docs.StringDecrypt(key, resReferensiDotker.Response) if err != nil { log.Printf("Error Decrypt: %v", err) return nil, err } var responseListDokter vclaim.ResponseReferensiDokter log.Println("dataresp: ", dataResp) err = json.Unmarshal([]byte(dataResp), &responseListDokter) if err != nil { log.Printf("Error Decode: %v", err) return nil, err } log.Println("res: ", resReferensiDotker) responses = &vclaim.ResponseGetReferensiDokter{ MetaData: resReferensiDotker.MetaData, Response: responseListDokter, } return responses, nil }