Commit 885169f4 authored by Your Name's avatar Your Name

Initial commit

parents
Pipeline #743 failed with stages
{
"swagger": "2.0",
"info": {
"title": "GPU+Model service",
"version": "1.0.0"
},
"paths": {
"/hw": {
"post": {
"summary": "get host hardware info and usage",
"responses": {
"200": {
"description": "success",
"schema": {
"$ref": "#/definitions/hw"
}
}
}
}
},
"/callback": {
"post": {}
}
},
"definitions": {
"hw": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int64"
},
"msg": {
"type": "string"
},
"data": {
"type": "object",
"properties": {
}
}
}
},
"gpu": {
"type": "object",
"properties": {
"seq": {
"type": "integer",
"format": "int64"
},
"model": {
"type": "string"
},
"mem_util": {
"type": "integer",
"format": "int64"
},
"total_mem": {
"type": "integer",
"format": "int64"
},
"power": {
"type": "integer",
"format": "int64"
},
"gpu_tmp": {
"type": "integer",
"format": "int64"
},
}
}
"cpu": {
"type": "object",
"properties": {
"seq": {
"type": "integer",
"format": "int64"
},
"model": {
"type": "string"
},
"mem_util": {
"type": "integer",
"format": "int64"
},
"total_mem": {
"type": "integer",
"format": "int64"
},
"power": {
"type": "integer",
"format": "int64"
},
"gpu_tmp": {
"type": "integer",
"format": "int64"
},
}
}
"mem": {
"type": "object",
"properties": {
"total": {
"type": "integer",
"format": "int64"
},
"used": {
"type": "string"
},
"free": {
"type": "integer",
"format": "int64"
},
}
}
"disk": {
"type": "object",
"properties": {
"total": {
"type": "integer",
"format": "int64"
},
"mount": {
"type": "string"
},
"used": {
"type": "integer",
"format": "int64"
},
}
}
"network": {
"type": "object",
"properties": {
"seed": {
"type": "integer",
"format": "int64"
},
"send": {
"type": "integer",
"format": "int64"
},
"receive": {
"type": "integer",
"format": "int64"
},
}
}
"Error": {
"type": "object",
"properties": {
"code": {
"type": "integer",
"format": "int32"
},
"message": {
"type": "string"
}
}
}
}
}
openapi: 3.0.0
servers:
- url: http://124.193.167.71:5001/
description: Default server
info:
description: |
This is a sample sniper wallet server.
You can find out more http://124.193.167.71:8001/docs/polygon/Uniswap
## Introduction
This API is documented in **OpenAPI format** and is based on
version: 0.0.1
title: Swagger Uniswap Wallet YAML
termsOfService: "http://swagger.io/terms/"
contact:
name: API Support
email: apiteam@swagger.io
url: https://github.com/Redocly/redoc
x-logo:
url: "https://redocly.github.io/redoc/petstore-logo.png"
altText: Petstore logo
license:
name: Apache 2.0
url: "http://www.apache.org/licenses/LICENSE-2.0.html"
externalDocs:
description: Find out how to create Github repo for your OpenAPI spec.
url: "https://github.com/Rebilly/generator-openapi-repo"
tags:
- name: MonitorHardware
description: Everything about host hardware
# - name: User
# description: Everything about user
# - name: store
# description: Access to Petstore orders
# x-displayName: Petstore Orders
# - name: user
# description: Operations about user
# x-displayName: Users
# - name: pet_model
# x-displayName: The Pet Model
# description: |
# <SchemaDefinition schemaRef="#/components/schemas/Pet" />
# - name: store_model
# x-displayName: The Order Model
# description: |
# <SchemaDefinition schemaRef="#/components/schemas/Order" exampleRef="#/components/examples/Order" showReadOnly={true} showWriteOnly={true} />
x-tagGroups:
- name: General
tags:
- pet
- store
- name: User Management
tags:
- user
- name: Models
tags:
- pet_model
- store_model
paths:
/hw:
get:
summary: get host hardware info and usage
tags:
- MonitorHardware
responses:
"200":
description: successful operation
headers:
X-ProxyBodyHash-SignatureCode:
type: integer
enum: [200, 500]
description: sign status code.
X-ProxyBodyHash-SignatureErr:
type: string
description: sign error msg.
X-ProxyBodyHash:
type: string
description: response body hash value.
X-ProxyBodyHash-Signature:
type: string
description: signature for hash.
content:
application/json:
schema:
type: object
properties:
data:
$ref: "#/components/schemas/hw"
code:
type: integer
format: int64
enum: [200, 500]
msg:
type: string
components:
securitySchemes:
api_key:
description: |
For this sample, you can use the api key `special-key` to test the authorization filters.
in: header
name: api_key
type: apiKey
petstore_auth:
description: |
Get access to data while protecting your account credentials.
OAuth2 is also a safer and more secure way to give you access.
flows:
implicit:
authorizationUrl: http://petstore.swagger.io/api/oauth/dialog
scopes:
read:pets: read your pets
write:pets: modify pets in your account
type: oauth2
schemas:
hw:
type: object
properties:
gpus:
type: array
items:
$ref: "#/components/schemas/gpu"
cpus:
type: object
properties:
total_util:
type: integer
format: int64
list:
type: array
items:
$ref: "#/components/schemas/cpu"
mem:
type: object
properties:
mem_total:
type: integer
format: int64
mem_free:
type: integer
format: int64
mem_util:
type: integer
format: int64
disk:
type: array
items:
$ref: "#/components/schemas/filesystem"
networks:
type: array
items:
$ref: "#/components/schemas/network"
network:
type: object
properties:
device:
type: string
speed:
type: integer
format: int64
send_rate:
type: integer
format: int64
recv_rate:
type: integer
format: int64
filesystem:
type: object
properties:
device:
type: string
mount_points:
type: array
items:
type: string
free_bytes:
type: integer
format: int64
size_bytes:
type: integer
format: int64
gpu:
type: object
properties:
seq:
type: integer
format: int64
model:
type: string
mem_util:
type: integer
format: int64
gpu_util:
type: integer
format: int64
mem_total:
type: integer
format: int64
mem_free:
type: integer
format: int64
power:
type: integer
format: int64
gpu_temp:
type: integer
format: int64
cpu:
type: object
properties:
seq:
type: integer
format: int64
model:
description: addr
type: string
thread:
type: integer
format: int64
core:
type: integer
format: int64
module proxyWithSign
go 1.22.1
require github.com/gofiber/fiber/v2 v2.52.4
require (
github.com/KyleBanks/depth v1.2.1 // indirect
github.com/Microsoft/go-winio v0.6.1 // indirect
github.com/PuerkitoBio/purell v1.1.1 // indirect
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/andybalholm/brotli v1.0.5 // indirect
github.com/bits-and-blooms/bitset v1.10.0 // indirect
github.com/btcsuite/btcd/btcec/v2 v2.2.0 // indirect
github.com/consensys/bavard v0.1.13 // indirect
github.com/consensys/gnark-crypto v0.12.1 // indirect
github.com/crate-crypto/go-kzg-4844 v1.0.0 // indirect
github.com/deckarep/golang-set/v2 v2.1.0 // indirect
github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect
github.com/ethereum/c-kzg-4844 v1.0.0 // indirect
github.com/ethereum/go-ethereum v1.14.0 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/go-ole/go-ole v1.3.0 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/jsonreference v0.19.6 // indirect
github.com/go-openapi/spec v0.20.4 // indirect
github.com/go-openapi/swag v0.19.15 // indirect
github.com/gofiber/swagger v1.0.0 // indirect
github.com/google/uuid v1.5.0 // indirect
github.com/gorilla/websocket v1.4.2 // indirect
github.com/holiman/uint256 v1.2.4 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/klauspost/compress v1.17.0 // indirect
github.com/mailru/easyjson v0.7.6 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.15 // indirect
github.com/mmcloughlin/addchain v0.4.0 // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/rs/cors v1.11.0 // indirect
github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible // indirect
github.com/storyicon/sigverify v1.1.0 // indirect
github.com/supranational/blst v0.3.11 // indirect
github.com/swaggo/files/v2 v2.0.0 // indirect
github.com/swaggo/swag v1.16.3 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/valyala/bytebufferpool v1.0.0 // indirect
github.com/valyala/fasthttp v1.51.0 // indirect
github.com/valyala/tcplisten v1.0.0 // indirect
golang.org/x/crypto v0.22.0 // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/net v0.24.0 // indirect
golang.org/x/sync v0.7.0 // indirect
golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/tools v0.20.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
rsc.io/tmplfunc v0.0.3 // indirect
)
This diff is collapsed.
package main
import (
"fmt"
"sync"
"github.com/ethereum/go-ethereum/common"
"github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/rlp"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/middleware/cors"
"github.com/gofiber/fiber/v2/middleware/proxy"
"github.com/gofiber/swagger"
"golang.org/x/crypto/sha3"
"github.com/ethereum/go-ethereum/accounts"
)
func main() {
// app := fiber.New(fiber.Config{
// // Prefork: true,
// // CaseSensitive: true,
// // StrictRouting: true,
// ServerHeader: "Fiber",
// AppName: "proxy with signature",
// })
// app := fiber.New()
// app.Use(cors.New())
app := fiber.New()
app.Use(cors.New())
app.Static("/swagger/docs", "./docs")
app.Get("/swagger/*", swagger.New(swagger.Config{ // custom
URL: "http://124.193.167.71:5001/swagger/docs/swagger.yaml", //http://124.193.167.71:8000/
DeepLinking: false,
// Expand ("list") or Collapse ("none") tag groups by default
DocExpansion: "none",
// Prefill OAuth ClientId on Authorize popup
// OAuth: &swagger.OAuthConfig{
// AppName: "OAuth Provider",
// ClientId: "21bb4edc-05a7-4afc-86f1-2e151e4ba6e2",
// },
// Ability to change OAuth2 redirect uri location
//OAuth2RedirectUrl: "http://localhost:8080/swagger/oauth2-redirect.html",
}))
app.All("/*", func(c *fiber.Ctx) error {
path := c.Path()
fmt.Println("path", path)
url := "http://124.193.167.71:5000" + path
if err := proxy.Do(c, url); err != nil {
return err
}
// Remove Server header from response
//c.Response().Header.Del(fiber.HeaderServer)
//h := rlpHash(c.Response().Body())
//fmt.Printf("%x\n", accounts.TextHash([]byte("hello")))
//h := rlpHash("hello")
//h := accounts.TextHash([]byte("hello"))
h := accounts.TextHash([]byte(string(c.Response().Body())))
fmt.Printf("%x\n", h)
//prv *ecdsa.PrivateKey
// privateKey, _, err := getPrivateKeyByIdx(0)
// if err != nil {
// t.Fatal(err)
// }
fmt.Println("c.Response().Body():", string(c.Response().Body()))
local, _ := crypto.HexToECDSA("4df7e0d1c1329d03c72ed0cec631adc048ae85178d3528e7f55368da0901ed5b")
sig, err := crypto.Sign(h[:], local)
if err != nil {
fmt.Println("error", err.Error(), "hash", fmt.Sprintf("%x", h), "body", string(c.Response().Body()))
//return nil, err
c.Response().Header.Add("X-ProxyBodyHash-SignatureCode", "500")
c.Response().Header.Add("X-ProxyBodyHash-SignatureErr", err.Error())
} else {
c.Response().Header.Add("X-ProxyBodyHash-SignatureCode", "200")
}
//return tx.WithSignature(s, sig)
c.Response().Header.Add("X-ProxyBodyHash", fmt.Sprintf("%x", h))
c.Response().Header.Add("X-ProxyBodyHash-Signature", fmt.Sprintf("%x", sig))
return nil
})
if err := app.Listen(":5001"); err != nil {
fmt.Println(" app.Listen", err.Error())
}
}
// Hash returns the hash to be signed by the sender.
// It does not uniquely identify the transaction.
// func (s EIP155Signer) Hash(tx *Transaction) common.Hash {
// return rlpHash([]interface{}{
// tx.Nonce(),
// tx.GasPrice(),
// tx.Gas(),
// tx.To(),
// tx.Value(),
// tx.Data(),
// s.chainId, uint(0), uint(0),
// })
// }
// SignTx signs the transaction using the given signer and private key.
// func SignTx(tx *Transaction, s Signer, prv *ecdsa.PrivateKey) (*Transaction, error) {
// h := s.Hash(tx)
// sig, err := crypto.Sign(h[:], prv)
// if err != nil {
// return nil, err
// }
// return tx.WithSignature(s, sig)
// }
// Hash returns the hash to be signed by the sender.
// It does not uniquely identify the transaction.
// func (s EIP155Signer) Hash(tx *Transaction) common.Hash {
// return rlpHash([]interface{}{
// tx.Nonce(),
// tx.GasPrice(),
// tx.Gas(),
// tx.To(),
// tx.Value(),
// tx.Data(),
// s.chainId, uint(0), uint(0),
// })
// }
// rlpHash encodes x and hashes the encoded bytes.
func rlpHash(x interface{}) (h common.Hash) {
sha := hasherPool.Get().(crypto.KeccakState)
defer hasherPool.Put(sha)
sha.Reset()
rlp.Encode(sha, x)
sha.Read(h[:])
return h
}
// import (
// "bytes"
// "sync"
// "github.com/ethereum/go-ethereum/common"
// "github.com/ethereum/go-ethereum/crypto"
// "github.com/ethereum/go-ethereum/rlp"
// "golang.org/x/crypto/sha3"
// )
// hasherPool holds LegacyKeccak256 hashers for rlpHash.
var hasherPool = sync.Pool{
New: func() interface{} { return sha3.NewLegacyKeccak256() },
}
package main
import (
"fmt"
"testing"
ethcommon "github.com/ethereum/go-ethereum/common"
"github.com/storyicon/sigverify"
)
func TestVerify(t *testing.T) {
valid, err := sigverify.VerifyEllipticCurveHexSignatureEx(
ethcommon.HexToAddress("0xb052C02346F80cF6ae4DF52c10FABD3e0aD24d81"),
[]byte("hello"),
"0x0498c6564863c78e663848b963fde1ea1d860d5d882d2abdb707d1e9179ff80630a4a71705da534a562c08cb64a546c6132de26eb77a44f086832cbc1dbe01f71b",
)
fmt.Println(valid, err) // true <nil>
}
func TestVerifyHttp(t *testing.T) {
//fmt.Printf("%x\n", accounts.TextHash([]byte("hello")))
valid, err := sigverify.VerifyEllipticCurveHexSignatureEx(
ethcommon.HexToAddress("0xEC7D4Cc269c5B90ba88E481a3904608a799A1f9F"),
[]byte(`{"data":{"gpus":[{"seq":0,"model":"NVIDIA GeForce RTX 3080","mem_util":0,"gpu_util":0,"mem_total":10554966016,"mem_free":9848225792,"power":3,"gpu_temp":24},{"seq":1,"model":"NVIDIA GeForce RTX 3080","mem_util":0,"gpu_util":0,"mem_total":10554966016,"mem_free":10539237376,"power":6,"gpu_temp":23},{"seq":2,"model":"NVIDIA GeForce RTX 3080","mem_util":0,"gpu_util":0,"mem_total":10554966016,"mem_free":10370416640,"power":7,"gpu_temp":22}],"cpus":{"total_util":0,"list":[{"seq":0,"model":"Intel(R) Xeon(R) CPU E5-2698 v3 @ 2.30GHz","thread":64,"core":32}]},"disk":[{"device":"/dev/sda2","mount_points":["/"],"free_bytes":415869456384,"size_bytes":588445270016},{"device":"/dev/sdc","mount_points":["/","/mnt/wslg/distro","/snap","/var/lib/docker"],"free_bytes":788169621504,"size_bytes":1081101176832},{"device":"C:\\134","mount_points":["/mnt/c"],"free_bytes":81437052928,"size_bytes":126873276416},{"device":"D:\\134","mount_points":["/mnt/d"],"free_bytes":946958905344,"size_bytes":2000381014016},{"device":"none","mount_points":["/usr/lib/wsl/drivers","/mnt/wsl","/mnt/wslg","/run","/run/lock","/run/shm","/run/user","/tmp/.X11-unix","/usr/lib/modules"],"free_bytes":81437052928,"size_bytes":126873276416},{"device":"rootfs","mount_points":["/init"],"free_bytes":67501084672,"size_bytes":67503013888},{"device":"snapfuse","mount_points":["/snap/bare/5","/snap/core22/1122","/snap/gtk-common-themes/1535","/snap/snapd/21184","/snap/snapd/21465","/snap/ubuntu-desktop-installer/1276","/snap/ubuntu-desktop-installer/1286","/snap/core22/1380"],"free_bytes":0,"size_bytes":131072},{"device":"tmpfs","mount_points":["/run","/run/lock","/run/snapd/ns","/run/user/1000"],"free_bytes":27038982144,"size_bytes":27042263040}],"networks":[{"device":"br-912d945026d7","speed":-125000,"send_rate":0,"recv_rate":0,"mac":"02:42:99:2c:2d:26"},{"device":"br-b127f187b58e","speed":-125000,"send_rate":0,"recv_rate":0,"mac":"02:42:5a:57:24:09"},{"device":"docker0","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"02:42:cc:45:c6:2f"},{"device":"eno1","speed":125000000,"send_rate":0,"recv_rate":0,"mac":"0c:c4:7a:0f:8b:6c"},{"device":"eno2","speed":125000000,"send_rate":0,"recv_rate":0,"mac":"0c:c4:7a:0f:8b:6d"},{"device":"eth0","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"00:15:5d:25:53:b3"},{"device":"veth00bbb33","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"26:46:85:ac:26:63"},{"device":"veth2cce297","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"5e:e7:89:db:3e:99"},{"device":"veth3dfcc27","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"6a:29:38:8f:e5:b8"},{"device":"veth3fc0bbe","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"4a:0b:53:0c:cb:2f"},{"device":"veth60e1761","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"3e:cd:9b:09:47:5f"},{"device":"veth6ef4326","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"36:2f:4c:f6:20:c3"},{"device":"veth89e35e6","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"f2:c2:fd:e0:4b:92"},{"device":"vethb1e1ee6","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"92:db:39:a3:87:41"},{"device":"vethb366d68","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"a2:fb:44:3b:0b:b3"},{"device":"vethb717a07","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"22:bc:00:58:39:f3"},{"device":"vethdd61b14","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"4a:fa:fc:f7:b1:77"},{"device":"vethf4faaeb","speed":1250000000,"send_rate":0,"recv_rate":0,"mac":"da:a5:9f:2c:02:02"}],"mem":{"mem_total":135012700160,"mem_free":128288522240,"mem_util":4}},"code":200,"msg":""}`),
//[]byte("hello"),
"0x3b17242860aa808687e5b26938af47d143340c1bbd19861e1fbca6989321046a3fdb0d5127c179c2463a89c1f2fc8e1d08635ba46c23d60c218959c2a0013d8f01",
)
fmt.Println(valid, err) // true <nil>
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment