Commit 510c83eb authored by lihailei's avatar lihailei

add contract module.

parent 6cb3e653
......@@ -6,6 +6,11 @@ import (
log "github.com/inconshreveable/log15"
jsonrpc "gitlab.33.cn/chain33/chain33/rpc"
"os"
crypto "gitlab.33.cn/chain33/chain33/common/crypto"
"gitlab.33.cn/chain33/chain33/types"
common "gitlab.33.cn/chain33/chain33/common"
"gitlab.33.cn/chain33/chain33/account"
)
var (
......@@ -102,3 +107,45 @@ func (c *RpcCtx) ReplyInterface() (interface{}, error) {
}
return result, nil
}
func (c *RpcCtx) RunWithoutMarshal()(string,error) {
var res string
rpc, err := jsonrpc.NewJSONClient(c.Addr)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return "",err
}
err = rpc.Call(c.Method, c.Params, &res)
if err != nil {
fmt.Fprintln(os.Stderr, err)
return "",err
}
return res,nil
}
func Getprivkey(key string) crypto.PrivKey {
cr, err := crypto.New(types.GetSignatureTypeName(types.SECP256K1))
if err != nil {
panic(err)
}
bkey, err := common.FromHex(key)
if err != nil {
panic(err)
}
priv, err := cr.PrivKeyFromBytes(bkey)
if err != nil {
panic(err)
}
return priv
}
func Genaddress() (string, crypto.PrivKey) {
cr, err := crypto.New(types.GetSignatureTypeName(types.SECP256K1))
if err != nil {
panic(err)
}
privto, err := cr.GenKey()
if err != nil {
panic(err)
}
addrto := account.PubKeyToAddress(privto.PubKey().Bytes())
return addrto.String(), privto
}
\ No newline at end of file
package common
const (
Code_10000 = "10000"
Code_10001 = "10001"
Code_10002 = "10002"
Code_10000 = "10000" //正常响应
Code_10001 = "10001" //请求参数错误响应
Code_10002 = "10002" //接口错误
//code_10003="10003"
)
const (
......
......@@ -4,6 +4,6 @@ runmode = dev
autorender = false
copyrequestbody = true
EnableDocs = true
jrpcAddr="http://localhost:8801"
jrpcAddr="http://139.219.190.149:8801"
LocalFilePath="D:/Repository/src/gitlab.33.cn/lihailei/chain33_sdk/src/upload/pkg/chain33.tgz"
EtcdURL="http://localhost:2379"
package controllers
import (
"github.com/astaxie/beego"
"gitlab.33.cn/chain33/chain33/account"
. "gitlab.33.cn/chain33/chain33/common"
jsonrpc "gitlab.33.cn/chain33/chain33/rpc"
"gitlab.33.cn/chain33/chain33/types"
. "gitlab.33.cn/lihailei/chain33_sdk/src/common"
blacklist "gitlab.33.cn/lihailei/chain33_sdk/src/models/contract/blacklist/types"
r "math/rand"
"net/http"
"encoding/json"
"fmt"
)
// ContractController operations for Peer
type ContractController struct {
beego.Controller
}
// URLMapping ...
func (c *ContractController) URLMapping() {
c.Mapping("invoke", c.Invoke)
}
//@Title Invoke
//@Description Invoke contract func.
//@Success 200 执行成功
//@Failure 403 Forbidden禁止执行
//@router /invoke [post,get]
func (c *ContractController) Invoke() {
execerName := c.Ctx.Request.Header.Get("execerName")
funcName := c.Ctx.Request.Header.Get("funcName")
fmt.Println(funcName)
if c.Ctx.Request.Method==http.MethodGet{
switch execerName {
//TODO:具体调用合约方法的业务逻辑在这里面实现
case "user.blacklist":
switch funcName {
case blacklist.FuncName_QueryOrgById:
var req types.Query
req.Execer=[]byte(c.Ctx.Request.Header.Get("execerName"))
req.FuncName=c.Ctx.Request.Header.Get("funcName")
qb := &blacklist.QueryOrgParam{}
qb.OrgId =c.Ctx.Request.Header.Get("orgId")
query := &blacklist.Query{&blacklist.Query_QueryOrg{qb}, ""}
b,_:=json.Marshal(query)
req.Payload=b
data,err:=queryChain(req)
if err != nil {
c.Data["json"] = err.Error()
c.ServeJSON()
} else {
c.Ctx.ResponseWriter.Write(data)
}
case "normPut":
execer := c.GetString("execerName")
privKey := c.GetString("privateKey")
body := c.Ctx.Input.RequestBody
if execer == "" || privKey == "" || len(body) == 0 {
c.Ctx.ResponseWriter.WriteHeader(400)
return
}
res, err := sendTx(execer, privKey, body)
if err != nil {
c.Data["json"] = err.Error()
c.ServeJSON()
} else {
c.Data["json"] = res
c.ServeJSON()
}
default:
//TODO:
}
case "":
default:
}
}else if c.Ctx.Request.Method==http.MethodPost{
fmt.Println("11111111111111")
fmt.Println("name======",execerName)
switch execerName {
//TODO:具体调用合约方法的业务逻辑在这里面实现
case "user.blacklist":
switch funcName {
case blacklist.FuncName_CreateOrg:
fmt.Println("222222222222222222")
org := &blacklist.Org{}
org.OrgId = c.Ctx.Request.Header.Get("orgId")
org.OrgName = c.Ctx.Request.Header.Get("orgName")
action := &blacklist.BlackAction{Value: &blacklist.BlackAction_Or{org}, FuncName: blacklist.FuncName_CreateOrg}
//nput := &types.NormAction_Nput{&types.NormPut{Key: key,Value: []byte(value)}}
//action := &types.NormAction{Value: nput, Ty: types.NormActionPut}
privKey := c.Ctx.Request.Header.Get("privateKey")
fmt.Println(privKey)
res, err := sendTx(execerName, privKey, types.Encode(action))
fmt.Println("333333333333333333333333")
fmt.Println(res)
if err != nil {
c.Data["json"] = err.Error()
c.ServeJSON()
} else {
c.Data["json"] = res
c.ServeJSON()
}
return
case "normPut":
//TODO:
execer := c.GetString("execerName")
privKey := c.GetString("privateKey")
body := c.Ctx.Input.RequestBody
if execer == "" || privKey == "" || len(body) == 0 {
c.Ctx.ResponseWriter.WriteHeader(400)
return
}
res, err := sendTx(execer, privKey, body)
if err != nil {
c.Data["json"] = err.Error()
c.ServeJSON()
} else {
c.Data["json"] = res
c.ServeJSON()
}
default:
//TODO:
}
case "":
default:
}
}
}
func sendTx(execer string, privKey string, body []byte) (string, error) {
tx := &types.Transaction{Execer: []byte(execer), Payload: body, Fee: 1e6}
tx.Nonce = r.Int63()
address,priv:=Genaddress()
fmt.Println("address:",address)
//tx.Sign(types.SECP256K1, Getprivkey(privKey))
tx.Sign(types.SECP256K1, priv)
tx.To = account.ExecAddress(execer).String()
data := ToHex(types.Encode(tx))
params := jsonrpc.RawParm{
Data: data,
}
ctx := NewRpcCtx(GetJrpcURL(), "Chain33.SendTransaction", params, nil)
res, err := ctx.RunWithoutMarshal()
fmt.Println("===========",res)
return res, err
}
func queryChain(req types.Query) ([]byte, error) {
var res interface{}
//req.Execer = []byte("norm")
//req.FuncName = "NormGet"
//req.Payload = []byte(key)
ctx := NewRpcCtx(GetJrpcURL(), "Chain33.Query", req, &res)
data, err := ctx.ReplyData()
return data, err
}
......@@ -4,8 +4,11 @@ import (
"github.com/astaxie/beego"
jsonrpc "gitlab.33.cn/chain33/chain33/rpc"
"gitlab.33.cn/chain33/chain33/types"
"gitlab.33.cn/chain33/chain33/account"
. "gitlab.33.cn/lihailei/chain33_sdk/src/common"
. "gitlab.33.cn/lihailei/chain33_sdk/src/models"
. "gitlab.33.cn/chain33/chain33/common"
r "math/rand"
)
// TxController operations for Tx
......@@ -17,6 +20,7 @@ type TxController struct {
func (c *TxController) URLMapping() {
c.Mapping("queryTxByHash", c.QueryTxByHash)
c.Mapping("queryTxByAddr", c.QueryTxByAddr)
c.Mapping("sendTx", c.SendTx)
}
//queryTxByHash...
......@@ -109,3 +113,39 @@ func queryByHash(rpcAddr, txHash string) ([]byte, error) {
ctx.SetResultCb(ParseQueryTxRes)
return ctx.ReplyData()
}
//SendTX
//@Title SendTX
//@Description SendTX
//@Param execerName query string true "执行器名称"
//@Param privateKey query string true "私钥"
//@Success 200 执行成功返回交易信息
//@Failure 403 Forbidden禁止执行
//@Failure 400 传入参数有误
// @router /sendTX [post]
func(c *TxController) SendTx(){
execer := c.GetString("execerName")
privKey := c.GetString("privateKey")
body :=c.Ctx.Input.RequestBody
if execer ==""||privKey==""||len(body)==0{
c.Ctx.ResponseWriter.WriteHeader(400)
return
}
tx := &types.Transaction{Execer: []byte(execer), Payload: body, Fee: 1e6}
tx.Nonce = r.Int63()
tx.Sign(types.SECP256K1, Getprivkey(privKey))
tx.To = account.ExecAddress(execer).String()
data := ToHex(types.Encode(tx))
params := jsonrpc.RawParm{
Data: data,
}
ctx := NewRpcCtx(GetJrpcURL(), "Chain33.SendTransaction", params, nil)
res,err:=ctx.RunWithoutMarshal()
if err != nil {
c.Data["json"] = err.Error()
c.ServeJSON()
} else {
c.Data["json"] = res
c.ServeJSON()
}
}
\ No newline at end of file
{"D:\\Repository\\src\\gitlab.33.cn\\lihailei\\chain33_sdk\\src\\controllers":1526631102104077000}
\ No newline at end of file
This diff is collapsed.
syntax = "proto3";
package types;
message BlackAction {
oneof value {
Record rc = 1;
Org or = 3;
Transaction tr =4;
Agency ac= 5;
User user=6;
}
string funcName = 2;
}
message Record {
string recordId = 1;
string docType = 2;
string clientId = 3;
string clientName = 4;
string negativeType = 5;
string negativeSeverity = 6;
string negativeInfo = 7;
string orgAddr = 8;
bool searchable = 9;
string createTime = 10;
string updateTime = 11;
string orgId = 12;
}
message Transaction {
string docType = 1;
string txId = 2;
string from = 3;
string to = 4;
int64 credit = 5;
string createTime = 6;
string updateTime = 7;
}
message Org {
string docType = 1;
string orgId = 2;
string orgName = 3;
string orgAddr = 4;
int64 orgCredit =5;
string createTime = 6;
string updateTime = 7;
}
message Agency {
string name = 1;
string addr = 2;
int64 credit = 3;
int64 issueCredit = 4;
string createTime = 5;
string updateTime = 6;
}
message Query {
oneof value {
QueryOrgParam queryOrg = 1;
QueryTransactionParam queryTransaction = 2;
QueryRecordParam queryRecord =3;
DeleteRecordParam delRecord= 4;
User loginCheck=6;
QueryKeyParam queryKey=7;
}
string PrivateKey = 5;
}
message QueryOrgParam {
string orgId =1;
}
message QueryTransactionParam {
string byTxId =1;
string byToAddr = 2;
string byFromAddr = 3;
}
message QueryRecordParam {
string byRecordId = 1;
string byClientName = 2;
}
message DeleteRecordParam {
string orgId = 1;
string recordId = 2;
}
message QueryKeyParam {
string Key = 1;
}
message User{
string userName = 1;
string userId = 2;
string orgId = 3;
string passWord = 4;
string createTime = 5;
string updateTime = 6;
}
\ No newline at end of file
package types
import (
"errors"
)
const Fee = 1e6
const SecretLen = 32
const DefaultAmount = 1e11
var (
ErrNotFound = errors.New("ErrNotFound")
CreditInsufficient = errors.New("Insufficient integration, please recharge.")
ErrQueryNotSupport = errors.New("ErrQueryNotSupport")
)
const ConnIp = "localhost"
const AddCredit = 10
//httpListen 返回的错误提示
const (
ErrorParm = "The request parameter is wrong, please check again."
ErrorMethod = "The request method is wrong, please check again."
)
const (
SUCESS = "SUCESS"
FAIL = "FAIL"
)
//创世地址可以无限向其他orgAddr放送积分
const GenesisAddr = "0x0000000000000000000000000000"
//方法名定义
const (
FuncName_SubmitRecord = "submitRecord"
FuncName_QueryRecordById = "queryRecordById"
FuncName_CreateOrg = "createOrg"
FuncName_QueryOrgById = "queryOrgById"
//FuncName_QueryRecordByName = "queryRecordByName"
FuncName_QueryTxById = "queryTxByTxId"
//FuncName_QueryTxByFromAddr = "queryTxByFromAddr"
//FuncName_QueryTxByToAddr = "queryTxByToAddr"
FuncName_DeleteRecord = "deleteRecord"
FuncName_Transfer = "transfer"
FuncName_RegisterUser = "registerUser"
FuncName_LoginCheck = "loginCheck"
FuncName_ModifyUserPwd = "modifyUserPwd"
FuncName_ResetUserPwd = "resetUserPwd"
FuncName_CheckKeyIsExsit = "checkKeyIsExsit"
)
const (
SubmitRecordDoc = "这是通过提交record来获取积分!"
)
package routers
import (
"github.com/astaxie/beego"
"github.com/astaxie/beego/context/param"
)
func init() {
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"],
beego.ControllerComments{
Method: "CreateAccount",
Router: `/createAccount`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"],
beego.ControllerComments{
Method: "GetAccounts",
Router: `/getAccounts`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"],
beego.ControllerComments{
Method: "GetBalance",
Router: `/getBalance`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"],
beego.ControllerComments{
Method: "ImportKey",
Router: `/importKey`,
AllowHTTPMethods: []string{"put"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"],
beego.ControllerComments{
Method: "SetLabel",
Router: `/setLabel`,
AllowHTTPMethods: []string{"put"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:AccountController"],
beego.ControllerComments{
Method: "Transfer",
Router: `/transfer`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"],
beego.ControllerComments{
Method: "GetBlockHashByHeight",
Router: `/getBlockHashByHeight`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"],
beego.ControllerComments{
Method: "GetBlockHeaders",
Router: `/getBlockHeaders`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"],
beego.ControllerComments{
Method: "GetBlockList",
Router: `/getBlockList`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"],
beego.ControllerComments{
Method: "GetBlockViewByHash",
Router: `/getBlockViewByHash`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:BlockController"],
beego.ControllerComments{
Method: "GetLastHeader",
Router: `/getLastHeader`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:ContractController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:ContractController"],
beego.ControllerComments{
Method: "Invoke",
Router: `/invoke`,
AllowHTTPMethods: []string{"post","get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:PeerController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:PeerController"],
beego.ControllerComments{
Method: "GetPeers",
Router: `/getPeers`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:ServerController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:ServerController"],
beego.ControllerComments{
Method: "ClearChain",
Router: `/clearChain`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:ServerController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:ServerController"],
beego.ControllerComments{
Method: "DeployChain",
Router: `/deployChain`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:ServerController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:ServerController"],
beego.ControllerComments{
Method: "StopChain",
Router: `/stopChain`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:TaskController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:TaskController"],
beego.ControllerComments{
Method: "GetTaskStatus",
Router: `/getTaskStatus`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:TxController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:TxController"],
beego.ControllerComments{
Method: "QueryTxByAddr",
Router: `/queryTxByAddr`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:TxController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:TxController"],
beego.ControllerComments{
Method: "QueryTxByHash",
Router: `/queryTxByHash`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:TxController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:TxController"],
beego.ControllerComments{
Method: "SendTx",
Router: `/sendTX`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"],
beego.ControllerComments{
Method: "Lock",
Router: `/lock`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"],
beego.ControllerComments{
Method: "MergeBalance",
Router: `/mergeBalance`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"],
beego.ControllerComments{
Method: "ModifyPwd",
Router: `/modifyPwd`,
AllowHTTPMethods: []string{"put"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"],
beego.ControllerComments{
Method: "UnLock",
Router: `/unLock`,
AllowHTTPMethods: []string{"post"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"],
beego.ControllerComments{
Method: "WalletListTxs",
Router: `/walletListTxs`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"] = append(beego.GlobalControllerRouter["gitlab.33.cn/lihailei/chain33_sdk/src/controllers:WalletController"],
beego.ControllerComments{
Method: "WalletStatus",
Router: `/walletStatus`,
AllowHTTPMethods: []string{"get"},
MethodParams: param.Make(),
Params: nil})
}
......@@ -50,6 +50,11 @@ func init() {
&controllers.TaskController{},
),
),
beego.NSNamespace("/contract",
beego.NSInclude(
&controllers.ContractController{},
),
),
)
//ns.Filter("before", func(ctx *context.Context) {
// //_, ok := ctx.Input.Session("uid").(int)
......
File added
File added
<!-- HTML for static distribution bundle build -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Swagger UI</title>
<link href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700" rel="stylesheet">
<link rel="stylesheet" type="text/css" href="./swagger-ui.css" >
<link rel="icon" type="image/png" href="./favicon-32x32.png" sizes="32x32" />
<link rel="icon" type="image/png" href="./favicon-16x16.png" sizes="16x16" />
<style>
html
{
box-sizing: border-box;
overflow: -moz-scrollbars-vertical;
overflow-y: scroll;
}
*,
*:before,
*:after
{
box-sizing: inherit;
}
body {
margin:0;
background: #fafafa;
}
</style>
</head>
<body>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position:absolute;width:0;height:0">
<defs>
<symbol viewBox="0 0 20 20" id="unlocked">
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V6h2v-.801C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8z"></path>
</symbol>
<symbol viewBox="0 0 20 20" id="locked">
<path d="M15.8 8H14V5.6C14 2.703 12.665 1 10 1 7.334 1 6 2.703 6 5.6V8H4c-.553 0-1 .646-1 1.199V17c0 .549.428 1.139.951 1.307l1.197.387C5.672 18.861 6.55 19 7.1 19h5.8c.549 0 1.428-.139 1.951-.307l1.196-.387c.524-.167.953-.757.953-1.306V9.199C17 8.646 16.352 8 15.8 8zM12 8H8V5.199C8 3.754 8.797 3 10 3c1.203 0 2 .754 2 2.199V8z"/>
</symbol>
<symbol viewBox="0 0 20 20" id="close">
<path d="M14.348 14.849c-.469.469-1.229.469-1.697 0L10 11.819l-2.651 3.029c-.469.469-1.229.469-1.697 0-.469-.469-.469-1.229 0-1.697l2.758-3.15-2.759-3.152c-.469-.469-.469-1.228 0-1.697.469-.469 1.228-.469 1.697 0L10 8.183l2.651-3.031c.469-.469 1.228-.469 1.697 0 .469.469.469 1.229 0 1.697l-2.758 3.152 2.758 3.15c.469.469.469 1.229 0 1.698z"/>
</symbol>
<symbol viewBox="0 0 20 20" id="large-arrow">
<path d="M13.25 10L6.109 2.58c-.268-.27-.268-.707 0-.979.268-.27.701-.27.969 0l7.83 7.908c.268.271.268.709 0 .979l-7.83 7.908c-.268.271-.701.27-.969 0-.268-.269-.268-.707 0-.979L13.25 10z"/>
</symbol>
<symbol viewBox="0 0 20 20" id="large-arrow-down">
<path d="M17.418 6.109c.272-.268.709-.268.979 0s.271.701 0 .969l-7.908 7.83c-.27.268-.707.268-.979 0l-7.908-7.83c-.27-.268-.27-.701 0-.969.271-.268.709-.268.979 0L10 13.25l7.418-7.141z"/>
</symbol>
<symbol viewBox="0 0 24 24" id="jump-to">
<path d="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z"/>
</symbol>
<symbol viewBox="0 0 24 24" id="expand">
<path d="M10 18h4v-2h-4v2zM3 6v2h18V6H3zm3 7h12v-2H6v2z"/>
</symbol>
</defs>
</svg>
<div id="swagger-ui"></div>
<script src="./swagger-ui-bundle.js"> </script>
<script src="./swagger-ui-standalone-preset.js"> </script>
<script>
window.onload = function() {
// Build a system
const ui = SwaggerUIBundle({
url: "swagger.json",
dom_id: '#swagger-ui',
presets: [
SwaggerUIBundle.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUIBundle.plugins.DownloadUrl
],
layout: "StandaloneLayout"
})
window.ui = ui
}
</script>
</body>
</html>
<!doctype html>
<html lang="en-US">
<body onload="run()">
</body>
</html>
<script>
'use strict';
function run () {
var oauth2 = window.opener.swaggerUIRedirectOauth2;
var sentState = oauth2.state;
var isValid, qp, arr;
qp = (window.location.hash || location.search).substring(1);
arr = qp.split("&")
arr.forEach(function (v,i,_arr) { _arr[i] = '"' + v.replace('=', '":"') + '"';})
qp = qp ? JSON.parse('{' + arr.join() + '}',
function (key, value) {
return key === "" ? value : decodeURIComponent(value)
}
) : {}
isValid = qp.state === sentState
if (oauth2.auth.schema.get("flow") === "accessCode" && !oauth2.auth.code) {
if (!isValid) {
oauth2.errCb({
authId: oauth2.auth.name,
source: "auth",
level: "warning",
message: "Authorization may be unsafe, passed state was changed in server Passed state wasn't returned from auth server"
});
}
if (qp.code) {
delete oauth2.state;
oauth2.auth.code = qp.code;
oauth2.callback(oauth2.auth);
} else {
oauth2.errCb({
authId: oauth2.auth.name,
source: "auth",
level: "error",
message: "Authorization failed: no accessCode received from the server"
});
}
} else {
oauth2.callback({auth: oauth2.auth, token: qp, isValid: isValid});
}
window.close();
}
</script>
This source diff could not be displayed because it is too large. You can view the blob instead.
{"version":3,"file":"swagger-ui-bundle.js","sources":["webpack:///swagger-ui-bundle.js"],"mappings":"AAAA;AAu/FA;AA6+FA;;;;;;;;;;;;;;;;;;;;;;;;;;AAyTA;;;;;;AAoIA;AAi7FA;AAmtCA;AAi0IA;AA0oJA;AAgwFA;AAyrGA;AA0lFA;AA4nFA;AA+9CA;AA+gDA;AAwrCA;AA60EA;;;;;AA6oCA;AAsyJA;;;;;;;;;;;;;;AA64EA;AA4mIA;AAquJA;AA2qHA;AA2mGA;AAiiEA;AAq4DA;AAg3DA;AAoPA;;;;;;AAk7FA;AA07FA;;;;;AAi8CA;AAgsFA;AAs2CA;AAglCA;AAu9CA;AAy8EA;AAsiCA;AA+yFA;;;;;;;;;AAgkDA;AA2zIA;AAu7FA;AAmrFA;AAu0EA","sourceRoot":""}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
{"version":3,"file":"swagger-ui-standalone-preset.js","sources":["webpack:///swagger-ui-standalone-preset.js"],"mappings":"AAAA;;;;;AA8QA;AAmvGA;AAuxFA;;;;;;AAocA;AAkvFA;AAu+CA;AAo+CA;AAgrCA;AAuyEA","sourceRoot":""}
\ No newline at end of file
This diff is collapsed.
{"version":3,"file":"swagger-ui.css","sources":[],"mappings":"","sourceRoot":""}
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
{"version":3,"file":"swagger-ui.js","sources":["webpack:///swagger-ui.js"],"mappings":"AAAA;;;;;;AA0yCA;AAoyHA;AAmyHA;AAykGA;AA+9BA;AA6iCA;AAojCA;AAu5BA","sourceRoot":""}
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
# Treat all files in this repo as binary, with no git magic updating
# line endings. Windows users contributing to Go will need to use a
# modern version of git and editors capable of LF line endings.
#
# We'll prevent accidental CRLF line endings from entering the repo
# via the git-review gofmt checks.
#
# See golang.org/issue/9281
* -text
# Add no patterns to .hgignore except for files generated by the build.
last-change
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