Using remote ip as host information for presence data
这个提交包含在:
父节点
f90aac55a8
当前提交
11f2f074a1
|
@ -0,0 +1,5 @@
|
||||||
|
package constants
|
||||||
|
|
||||||
|
const (
|
||||||
|
DefaultMixPort = "1789"
|
||||||
|
)
|
44
docs/docs.go
44
docs/docs.go
|
@ -1,14 +1,19 @@
|
||||||
// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
|
// GENERATED BY THE COMMAND ABOVE; DO NOT EDIT
|
||||||
// This file was generated by swaggo/swag at
|
// This file was generated by swaggo/swag at
|
||||||
// 2019-09-18 13:34:09.321106544 +0100 BST m=+0.021854677
|
// 2019-09-18 14:51:50.255767945 +0100 BST m=+0.021395519
|
||||||
|
|
||||||
package docs
|
package docs
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/alecthomas/template"
|
||||||
"github.com/swaggo/swag"
|
"github.com/swaggo/swag"
|
||||||
)
|
)
|
||||||
|
|
||||||
var doc = `{
|
var doc = `{
|
||||||
|
"schemes": {{ marshal .Schemes }},
|
||||||
"swagger": "2.0",
|
"swagger": "2.0",
|
||||||
"info": {
|
"info": {
|
||||||
"description": "This is a temporarily centralized directory/PKI/metrics API to allow us to get the other Nym node types running. Its functionality will eventually be folded into other parts of Nym.",
|
"description": "This is a temporarily centralized directory/PKI/metrics API to allow us to get the other Nym node types running. Its functionality will eventually be folded into other parts of Nym.",
|
||||||
|
@ -21,6 +26,8 @@ var doc = `{
|
||||||
},
|
},
|
||||||
"version": "1.0"
|
"version": "1.0"
|
||||||
},
|
},
|
||||||
|
"host": "{{.Host}}",
|
||||||
|
"basePath": "{{.BasePath}}",
|
||||||
"paths": {
|
"paths": {
|
||||||
"/api/healthcheck": {
|
"/api/healthcheck": {
|
||||||
"get": {
|
"get": {
|
||||||
|
@ -354,7 +361,6 @@ var doc = `{
|
||||||
"models.HostInfo": {
|
"models.HostInfo": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"host",
|
|
||||||
"pubKey"
|
"pubKey"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
@ -369,9 +375,8 @@ var doc = `{
|
||||||
"models.MixHostInfo": {
|
"models.MixHostInfo": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"pubKey",
|
|
||||||
"layer",
|
"layer",
|
||||||
"host"
|
"pubKey"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
"host": {
|
"host": {
|
||||||
|
@ -408,7 +413,6 @@ var doc = `{
|
||||||
"models.MixProviderHostInfo": {
|
"models.MixProviderHostInfo": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"required": [
|
"required": [
|
||||||
"host",
|
|
||||||
"pubKey"
|
"pubKey"
|
||||||
],
|
],
|
||||||
"properties": {
|
"properties": {
|
||||||
|
@ -454,11 +458,39 @@ var doc = `{
|
||||||
}
|
}
|
||||||
}`
|
}`
|
||||||
|
|
||||||
|
type swaggerInfo struct {
|
||||||
|
Version string
|
||||||
|
Host string
|
||||||
|
BasePath string
|
||||||
|
Schemes []string
|
||||||
|
Title string
|
||||||
|
Description string
|
||||||
|
}
|
||||||
|
|
||||||
|
// SwaggerInfo holds exported Swagger Info so clients can modify it
|
||||||
|
var SwaggerInfo = swaggerInfo{ Schemes: []string{}}
|
||||||
|
|
||||||
type s struct{}
|
type s struct{}
|
||||||
|
|
||||||
func (s *s) ReadDoc() string {
|
func (s *s) ReadDoc() string {
|
||||||
return doc
|
t, err := template.New("swagger_info").Funcs(template.FuncMap{
|
||||||
|
"marshal": func(v interface {}) string {
|
||||||
|
a, _ := json.Marshal(v)
|
||||||
|
return string(a)
|
||||||
|
},
|
||||||
|
}).Parse(doc)
|
||||||
|
if err != nil {
|
||||||
|
return doc
|
||||||
|
}
|
||||||
|
|
||||||
|
var tpl bytes.Buffer
|
||||||
|
if err := t.Execute(&tpl, SwaggerInfo); err != nil {
|
||||||
|
return doc
|
||||||
|
}
|
||||||
|
|
||||||
|
return tpl.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
swag.Register(swag.Name, &s{})
|
swag.Register(swag.Name, &s{})
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,444 @@
|
||||||
|
{
|
||||||
|
"swagger": "2.0",
|
||||||
|
"info": {
|
||||||
|
"description": "This is a temporarily centralized directory/PKI/metrics API to allow us to get the other Nym node types running. Its functionality will eventually be folded into other parts of Nym.",
|
||||||
|
"title": "Nym Directory API",
|
||||||
|
"termsOfService": "http://swagger.io/terms/",
|
||||||
|
"contact": {},
|
||||||
|
"license": {
|
||||||
|
"name": "Apache 2.0",
|
||||||
|
"url": "https://github.com/nymtech/directory-server/license"
|
||||||
|
},
|
||||||
|
"version": "1.0"
|
||||||
|
},
|
||||||
|
"host": "{{.Host}}",
|
||||||
|
"basePath": "{{.BasePath}}",
|
||||||
|
"paths": {
|
||||||
|
"/api/healthcheck": {
|
||||||
|
"get": {
|
||||||
|
"description": "Returns a 200 if the directory server is available.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"healthcheck"
|
||||||
|
],
|
||||||
|
"summary": "Lets the directory server tell the world it's alive",
|
||||||
|
"operationId": "healthCheck",
|
||||||
|
"responses": {
|
||||||
|
"200": {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/metrics/mixes": {
|
||||||
|
"get": {
|
||||||
|
"description": "You'd never want to run this in production, but for demo and debug purposes it gives us the ability to generate useful visualisations of network traffic.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"metrics"
|
||||||
|
],
|
||||||
|
"summary": "Lists mixnode activity in the past 1 second",
|
||||||
|
"operationId": "listMixMetrics",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/models.MixMetric"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Bad Request",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Not Found",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"post": {
|
||||||
|
"description": "You'd never want to run this in production, but for demo and debug purposes it gives us the ability to generate useful visualisations of network traffic.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"metrics"
|
||||||
|
],
|
||||||
|
"summary": "Create a metric detailing how many messages a given mixnode sent and received",
|
||||||
|
"operationId": "createMixMetric",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "object",
|
||||||
|
"name": "object",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.MixMetric"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"201": {},
|
||||||
|
"400": {
|
||||||
|
"description": "Bad Request",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Not Found",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/presence/coconodes": {
|
||||||
|
"post": {
|
||||||
|
"description": "Nym Coconut nodes can ping this method to let the directory server know they're up. We can then use this info to create topologies of the overall Nym network.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"presence"
|
||||||
|
],
|
||||||
|
"summary": "Lets a coconut node tell the directory server it's alive",
|
||||||
|
"operationId": "addCocoNode",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "object",
|
||||||
|
"name": "object",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.HostInfo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"201": {},
|
||||||
|
"400": {
|
||||||
|
"description": "Bad Request",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Not Found",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/presence/mixnodes": {
|
||||||
|
"post": {
|
||||||
|
"description": "Nym mixnodes can ping this method to let the directory server know they're up. We can then use this info to create topologies of the overall Nym network.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"presence"
|
||||||
|
],
|
||||||
|
"summary": "Lets mixnode a node tell the directory server it's alive",
|
||||||
|
"operationId": "addMixNode",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "object",
|
||||||
|
"name": "object",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.MixHostInfo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"201": {},
|
||||||
|
"400": {
|
||||||
|
"description": "Bad Request",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Not Found",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/presence/providers": {
|
||||||
|
"post": {
|
||||||
|
"description": "Nym mix providers can ping this method to let the directory server know they're up. We can then use this info to create topologies of the overall Nym network.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"presence"
|
||||||
|
],
|
||||||
|
"summary": "Lets a mixnode tell the directory server it's alive",
|
||||||
|
"operationId": "addMixProvider",
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"description": "object",
|
||||||
|
"name": "object",
|
||||||
|
"in": "body",
|
||||||
|
"required": true,
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.MixProviderHostInfo"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"responses": {
|
||||||
|
"201": {},
|
||||||
|
"400": {
|
||||||
|
"description": "Bad Request",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Not Found",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"/api/presence/topology": {
|
||||||
|
"get": {
|
||||||
|
"description": "Nym nodes periodically ping the directory server to register that they're alive. This method provides a list of nodes which have been most recently seen.",
|
||||||
|
"consumes": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"produces": [
|
||||||
|
"application/json"
|
||||||
|
],
|
||||||
|
"tags": [
|
||||||
|
"presence"
|
||||||
|
],
|
||||||
|
"summary": "Lists which Nym mixnodes, providers, and coconodes are alive",
|
||||||
|
"operationId": "topology",
|
||||||
|
"responses": {
|
||||||
|
"200": {
|
||||||
|
"description": "OK",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Topology"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"400": {
|
||||||
|
"description": "Bad Request",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"404": {
|
||||||
|
"description": "Not Found",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"500": {
|
||||||
|
"description": "Internal Server Error",
|
||||||
|
"schema": {
|
||||||
|
"type": "object",
|
||||||
|
"$ref": "#/definitions/models.Error"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"definitions": {
|
||||||
|
"models.Error": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"error": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"models.HostInfo": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"pubKey"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pubKey": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"models.MixHostInfo": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"layer",
|
||||||
|
"pubKey"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"layer": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"pubKey": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"models.MixMetric": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"pubKey"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"pubKey": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"received": {
|
||||||
|
"type": "integer"
|
||||||
|
},
|
||||||
|
"sent": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"sent"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"models.MixProviderHostInfo": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"pubKey"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"pubKey": {
|
||||||
|
"type": "string"
|
||||||
|
},
|
||||||
|
"registeredClients": {
|
||||||
|
"type": "array",
|
||||||
|
"items": {
|
||||||
|
"$ref": "#/definitions/models.RegisteredClient"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"models.RegisteredClient": {
|
||||||
|
"type": "object",
|
||||||
|
"required": [
|
||||||
|
"pubKey"
|
||||||
|
],
|
||||||
|
"properties": {
|
||||||
|
"pubKey": {
|
||||||
|
"type": "string"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"models.Topology": {
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"cocoNodes": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"mixNodes": {
|
||||||
|
"type": "object"
|
||||||
|
},
|
||||||
|
"mixProviderNodes": {
|
||||||
|
"type": "object"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,318 @@
|
||||||
|
basePath: '{{.BasePath}}'
|
||||||
|
definitions:
|
||||||
|
models.Error:
|
||||||
|
properties:
|
||||||
|
error:
|
||||||
|
type: string
|
||||||
|
type: object
|
||||||
|
models.HostInfo:
|
||||||
|
properties:
|
||||||
|
host:
|
||||||
|
type: string
|
||||||
|
pubKey:
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- pubKey
|
||||||
|
type: object
|
||||||
|
models.MixHostInfo:
|
||||||
|
properties:
|
||||||
|
host:
|
||||||
|
type: string
|
||||||
|
layer:
|
||||||
|
type: integer
|
||||||
|
pubKey:
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- layer
|
||||||
|
- pubKey
|
||||||
|
type: object
|
||||||
|
models.MixMetric:
|
||||||
|
properties:
|
||||||
|
pubKey:
|
||||||
|
type: string
|
||||||
|
received:
|
||||||
|
type: integer
|
||||||
|
sent:
|
||||||
|
required:
|
||||||
|
- sent
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- pubKey
|
||||||
|
type: object
|
||||||
|
models.MixProviderHostInfo:
|
||||||
|
properties:
|
||||||
|
host:
|
||||||
|
type: string
|
||||||
|
pubKey:
|
||||||
|
type: string
|
||||||
|
registeredClients:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/models.RegisteredClient'
|
||||||
|
type: array
|
||||||
|
required:
|
||||||
|
- pubKey
|
||||||
|
type: object
|
||||||
|
models.RegisteredClient:
|
||||||
|
properties:
|
||||||
|
pubKey:
|
||||||
|
type: string
|
||||||
|
required:
|
||||||
|
- pubKey
|
||||||
|
type: object
|
||||||
|
models.Topology:
|
||||||
|
properties:
|
||||||
|
cocoNodes:
|
||||||
|
type: object
|
||||||
|
mixNodes:
|
||||||
|
type: object
|
||||||
|
mixProviderNodes:
|
||||||
|
type: object
|
||||||
|
type: object
|
||||||
|
host: '{{.Host}}'
|
||||||
|
info:
|
||||||
|
contact: {}
|
||||||
|
description: This is a temporarily centralized directory/PKI/metrics API to allow
|
||||||
|
us to get the other Nym node types running. Its functionality will eventually
|
||||||
|
be folded into other parts of Nym.
|
||||||
|
license:
|
||||||
|
name: Apache 2.0
|
||||||
|
url: https://github.com/nymtech/directory-server/license
|
||||||
|
termsOfService: http://swagger.io/terms/
|
||||||
|
title: Nym Directory API
|
||||||
|
version: "1.0"
|
||||||
|
paths:
|
||||||
|
/api/healthcheck:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: Returns a 200 if the directory server is available.
|
||||||
|
operationId: healthCheck
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200": {}
|
||||||
|
summary: Lets the directory server tell the world it's alive
|
||||||
|
tags:
|
||||||
|
- healthcheck
|
||||||
|
/api/metrics/mixes:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: You'd never want to run this in production, but for demo and debug
|
||||||
|
purposes it gives us the ability to generate useful visualisations of network
|
||||||
|
traffic.
|
||||||
|
operationId: listMixMetrics
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
items:
|
||||||
|
$ref: '#/definitions/models.MixMetric'
|
||||||
|
type: array
|
||||||
|
"400":
|
||||||
|
description: Bad Request
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"404":
|
||||||
|
description: Not Found
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
summary: Lists mixnode activity in the past 1 second
|
||||||
|
tags:
|
||||||
|
- metrics
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: You'd never want to run this in production, but for demo and debug
|
||||||
|
purposes it gives us the ability to generate useful visualisations of network
|
||||||
|
traffic.
|
||||||
|
operationId: createMixMetric
|
||||||
|
parameters:
|
||||||
|
- description: object
|
||||||
|
in: body
|
||||||
|
name: object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.MixMetric'
|
||||||
|
type: object
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"201": {}
|
||||||
|
"400":
|
||||||
|
description: Bad Request
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"404":
|
||||||
|
description: Not Found
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
summary: Create a metric detailing how many messages a given mixnode sent and
|
||||||
|
received
|
||||||
|
tags:
|
||||||
|
- metrics
|
||||||
|
/api/presence/coconodes:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: Nym Coconut nodes can ping this method to let the directory server
|
||||||
|
know they're up. We can then use this info to create topologies of the overall
|
||||||
|
Nym network.
|
||||||
|
operationId: addCocoNode
|
||||||
|
parameters:
|
||||||
|
- description: object
|
||||||
|
in: body
|
||||||
|
name: object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.HostInfo'
|
||||||
|
type: object
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"201": {}
|
||||||
|
"400":
|
||||||
|
description: Bad Request
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"404":
|
||||||
|
description: Not Found
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
summary: Lets a coconut node tell the directory server it's alive
|
||||||
|
tags:
|
||||||
|
- presence
|
||||||
|
/api/presence/mixnodes:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: Nym mixnodes can ping this method to let the directory server know
|
||||||
|
they're up. We can then use this info to create topologies of the overall
|
||||||
|
Nym network.
|
||||||
|
operationId: addMixNode
|
||||||
|
parameters:
|
||||||
|
- description: object
|
||||||
|
in: body
|
||||||
|
name: object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.MixHostInfo'
|
||||||
|
type: object
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"201": {}
|
||||||
|
"400":
|
||||||
|
description: Bad Request
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"404":
|
||||||
|
description: Not Found
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
summary: Lets mixnode a node tell the directory server it's alive
|
||||||
|
tags:
|
||||||
|
- presence
|
||||||
|
/api/presence/providers:
|
||||||
|
post:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: Nym mix providers can ping this method to let the directory server
|
||||||
|
know they're up. We can then use this info to create topologies of the overall
|
||||||
|
Nym network.
|
||||||
|
operationId: addMixProvider
|
||||||
|
parameters:
|
||||||
|
- description: object
|
||||||
|
in: body
|
||||||
|
name: object
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.MixProviderHostInfo'
|
||||||
|
type: object
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"201": {}
|
||||||
|
"400":
|
||||||
|
description: Bad Request
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"404":
|
||||||
|
description: Not Found
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
summary: Lets a mixnode tell the directory server it's alive
|
||||||
|
tags:
|
||||||
|
- presence
|
||||||
|
/api/presence/topology:
|
||||||
|
get:
|
||||||
|
consumes:
|
||||||
|
- application/json
|
||||||
|
description: Nym nodes periodically ping the directory server to register that
|
||||||
|
they're alive. This method provides a list of nodes which have been most recently
|
||||||
|
seen.
|
||||||
|
operationId: topology
|
||||||
|
produces:
|
||||||
|
- application/json
|
||||||
|
responses:
|
||||||
|
"200":
|
||||||
|
description: OK
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Topology'
|
||||||
|
type: object
|
||||||
|
"400":
|
||||||
|
description: Bad Request
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"404":
|
||||||
|
description: Not Found
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
"500":
|
||||||
|
description: Internal Server Error
|
||||||
|
schema:
|
||||||
|
$ref: '#/definitions/models.Error'
|
||||||
|
type: object
|
||||||
|
summary: Lists which Nym mixnodes, providers, and coconodes are alive
|
||||||
|
tags:
|
||||||
|
- presence
|
||||||
|
swagger: "2.0"
|
1
go.mod
1
go.mod
|
@ -4,6 +4,7 @@ go 1.12
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/BorisBorshevsky/timemock v0.0.0-20180501151413-a469e345aaba
|
github.com/BorisBorshevsky/timemock v0.0.0-20180501151413-a469e345aaba
|
||||||
|
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
|
||||||
github.com/coreos/etcd v3.3.10+incompatible
|
github.com/coreos/etcd v3.3.10+incompatible
|
||||||
github.com/dgraph-io/badger v1.6.0
|
github.com/dgraph-io/badger v1.6.0
|
||||||
github.com/ethereum/go-ethereum v1.9.3 // indirect
|
github.com/ethereum/go-ethereum v1.9.3 // indirect
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -11,6 +11,8 @@ github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tN
|
||||||
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M=
|
||||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
|
||||||
|
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM=
|
||||||
|
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04=
|
github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
|
|
|
@ -2,7 +2,7 @@ package models
|
||||||
|
|
||||||
// HostInfo comes from a node telling us it's alive
|
// HostInfo comes from a node telling us it's alive
|
||||||
type HostInfo struct {
|
type HostInfo struct {
|
||||||
Host string `json:"host" binding:"required"`
|
Host string `json:"host"`
|
||||||
PubKey string `json:"pubKey" binding:"required"`
|
PubKey string `json:"pubKey" binding:"required"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
package presence
|
package presence
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
"github.com/nymtech/directory-server/constants"
|
||||||
"github.com/nymtech/directory-server/models"
|
"github.com/nymtech/directory-server/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -53,6 +55,7 @@ func (controller *controller) AddMixNodePresence(c *gin.Context) {
|
||||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
json.HostInfo.Host = net.JoinHostPort(c.ClientIP(), constants.DefaultMixPort)
|
||||||
controller.service.AddMixNodePresence(json)
|
controller.service.AddMixNodePresence(json)
|
||||||
c.JSON(http.StatusCreated, gin.H{"ok": true})
|
c.JSON(http.StatusCreated, gin.H{"ok": true})
|
||||||
}
|
}
|
||||||
|
@ -99,6 +102,7 @@ func (controller *controller) AddMixProviderPresence(c *gin.Context) {
|
||||||
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
json.HostInfo.Host = net.JoinHostPort(c.ClientIP(), constants.DefaultMixPort)
|
||||||
controller.service.AddMixProviderPresence(json)
|
controller.service.AddMixProviderPresence(json)
|
||||||
c.JSON(http.StatusCreated, gin.H{"ok": true})
|
c.JSON(http.StatusCreated, gin.H{"ok": true})
|
||||||
}
|
}
|
||||||
|
|
正在加载...
在新工单中引用