From 698bc22360e2be658624b9f0683f551fcf9d4b64 Mon Sep 17 00:00:00 2001 From: Jeffrey Picard Date: Tue, 11 Oct 2022 14:29:51 +0000 Subject: [PATCH] server.banner --- server/args.go | 28 +++++++++++++++++++++++++ server/jsonrpc_server.go | 44 ++++++++++++++++------------------------ 2 files changed, 45 insertions(+), 27 deletions(-) diff --git a/server/args.go b/server/args.go index b192a92..ac609bb 100644 --- a/server/args.go +++ b/server/args.go @@ -1,6 +1,7 @@ package server import ( + "fmt" "log" "os" "strconv" @@ -36,6 +37,7 @@ type Args struct { RefreshDelta int CacheTTL int PeerFile string + Banner *string Country string BlockingChannelIds []string FilteringChannelIds []string @@ -78,6 +80,7 @@ const ( DefaultRefreshDelta = 5 DefaultCacheTTL = 5 DefaultPeerFile = "peers.txt" + DefaultBannerFile = "" DefaultCountry = "US" GENESIS_HASH = "9c89283ba0f3227f6c03b70216b9f665f0118d5e0fa729cedf4fb34d6a34f463" @@ -106,6 +109,26 @@ var ( DefaultFilteringChannelIds = []string{} ) +func loadBanner(bannerFile *string, serverVersion string) *string { + var banner string + + data, err := os.ReadFile(*bannerFile) + if err != nil { + banner = fmt.Sprintf("You are connected to an %s server.", serverVersion) + } else { + banner = string(data) + } + + /* + banner := os.Getenv("BANNER") + if banner == "" { + return nil + } + */ + + return &banner +} + // MakeDefaultArgs creates a default set of arguments for testing the server. func MakeDefaultTestArgs() *Args { args := &Args{ @@ -122,6 +145,7 @@ func MakeDefaultTestArgs() *Args { RefreshDelta: DefaultRefreshDelta, CacheTTL: DefaultCacheTTL, PeerFile: DefaultPeerFile, + Banner: nil, Country: DefaultCountry, GenesisHash: GENESIS_HASH, @@ -203,6 +227,7 @@ func ParseArgs(searchRequest *pb.SearchRequest) *Args { refreshDelta := parser.Int("", "refresh-delta", &argparse.Options{Required: false, Help: "elasticsearch index refresh delta in seconds", Default: DefaultRefreshDelta}) cacheTTL := parser.Int("", "cachettl", &argparse.Options{Required: false, Help: "Cache TTL in minutes", Default: DefaultCacheTTL}) peerFile := parser.String("", "peerfile", &argparse.Options{Required: false, Help: "Initial peer file for federation", Default: DefaultPeerFile}) + bannerFile := parser.String("", "bannerfile", &argparse.Options{Required: false, Help: "Banner file server.banner", Default: DefaultBannerFile}) country := parser.String("", "country", &argparse.Options{Required: false, Help: "Country this node is running in. Default US.", Default: DefaultCountry}) blockingChannelIds := parser.StringList("", "blocking-channel-ids", &argparse.Options{Required: false, Help: "Blocking channel ids", Default: DefaultBlockingChannelIds}) filteringChannelIds := parser.StringList("", "filtering-channel-ids", &argparse.Options{Required: false, Help: "Filtering channel ids", Default: DefaultFilteringChannelIds}) @@ -249,6 +274,8 @@ func ParseArgs(searchRequest *pb.SearchRequest) *Args { *jsonRPCPort = DefaultJSONRPCPort } + banner := loadBanner(bannerFile, HUB_PROTOCOL_VERSION) + args := &Args{ CmdType: SearchCmd, Host: *host, @@ -267,6 +294,7 @@ func ParseArgs(searchRequest *pb.SearchRequest) *Args { RefreshDelta: *refreshDelta, CacheTTL: *cacheTTL, PeerFile: *peerFile, + Banner: banner, Country: *country, BlockingChannelIds: *blockingChannelIds, FilteringChannelIds: *filteringChannelIds, diff --git a/server/jsonrpc_server.go b/server/jsonrpc_server.go index 42c0651..52fa6f1 100644 --- a/server/jsonrpc_server.go +++ b/server/jsonrpc_server.go @@ -5,13 +5,6 @@ import ( log "github.com/sirupsen/logrus" ) -// const ( -// GENESIS_HASH = "9c89283ba0f3227f6c03b70216b9f665f0118d5e0fa729cedf4fb34d6a34f463" -// HUB_PROTOCOL_VERSION = "0.107.0" -// PROTOCOL_MIN = "0.54.0" -// PROTOCOL_MAX = "0.199.0" -// ) - type ServerService struct { DB *db.ReadOnlyDBColumnFamily Args *Args @@ -19,22 +12,6 @@ type ServerService struct { type ServerFeaturesReq struct{} -/* - cls.cached_server_features.update({ - 'hosts': {}, - 'pruning': None, - 'server_version': cls.version, - 'protocol_min': min_str, - 'protocol_max': max_str, - 'genesis_hash': env.coin.GENESIS_HASH, - 'description': env.description, - 'payment_address': env.payment_address, - 'donation_address': env.donation_address, - 'daily_fee': env.daily_fee, - 'hash_function': 'sha256', - 'trending_algorithm': 'fast_ar' - }) -*/ type ServerFeaturesRes struct { Hosts map[string]string `json:"hosts"` Pruning string `json:"pruning"` @@ -61,10 +38,10 @@ func (t *ServerService) Features(req *ServerFeaturesReq, res **ServerFeaturesRes ProtocolMin: PROTOCOL_MIN, ProtocolMax: PROTOCOL_MAX, GenesisHash: GENESIS_HASH, - Description: "Herald", - PaymentAddress: "", - DonationAddress: "", - DailyFee: "1.0", + Description: t.Args.ServerDescription, + PaymentAddress: t.Args.PaymentAddress, + DonationAddress: t.Args.DonationAddress, + DailyFee: t.Args.DailyFee, HashFunction: "sha256", TrendingAlgorithm: "fast_ar", } @@ -72,3 +49,16 @@ func (t *ServerService) Features(req *ServerFeaturesReq, res **ServerFeaturesRes return nil } + +type ServerBannerReq struct{} + +type ServerBannerRes string + +// Banner is the json rpc endpoint for 'server.banner'. +func (t *ServerService) Banner(req *ServerBannerReq, res **ServerBannerRes) error { + log.Println("Banner") + + *res = (*ServerBannerRes)(t.Args.Banner) + + return nil +}