gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taldir] branch master updated: add gnunet-go dependency replacing


From: gnunet
Subject: [taler-taldir] branch master updated: add gnunet-go dependency replacing local copies
Date: Sun, 17 Jul 2022 07:24:56 +0200

This is an automated email from the git hooks/post-receive script.

martin-schanzenbach pushed a commit to branch master
in repository taldir.

The following commit(s) were added to refs/heads/master by this push:
     new 3d4923e  add gnunet-go dependency replacing local copies
3d4923e is described below

commit 3d4923ec4c606cda8343c8bd3b30777f3a3d9a3c
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Sun Jul 17 07:18:49 2022 +0200

    add gnunet-go dependency replacing local copies
---
 cmd/taldir-cli/main.go         |   3 +-
 cmd/taldir-server/main_test.go |   3 +-
 go.mod                         |   4 ++
 pkg/rest/taldir.go             |  34 ++++++-----
 pkg/util/base32.go             | 127 -----------------------------------------
 pkg/util/helper.go             |   7 ++-
 6 files changed, 31 insertions(+), 147 deletions(-)

diff --git a/cmd/taldir-cli/main.go b/cmd/taldir-cli/main.go
index eef9ece..3aa9c32 100644
--- a/cmd/taldir-cli/main.go
+++ b/cmd/taldir-cli/main.go
@@ -25,6 +25,7 @@ import (
   "flag"
   "taler.net/taldir/pkg/rest"
   "taler.net/taldir/pkg/util"
+  gnunetutil "git.gnunet.org/gnunet-go.git/pkg/util"
   "crypto/sha512"
 )
 
@@ -32,7 +33,7 @@ import (
 func generateLink(host string, addr string, challenge string) string {
   h := sha512.New()
   h.Write([]byte(addr))
-  h_addr := util.EncodeBinaryToString(h.Sum(nil))
+  h_addr := gnunetutil.EncodeBinaryToString(h.Sum(nil))
   return host + "/register/" + h_addr + "/" + challenge
 }
 
diff --git a/cmd/taldir-server/main_test.go b/cmd/taldir-server/main_test.go
index dcbeada..a61e425 100644
--- a/cmd/taldir-server/main_test.go
+++ b/cmd/taldir-server/main_test.go
@@ -30,6 +30,7 @@ import (
   "io/ioutil"
   "taler.net/taldir/pkg/rest"
   _ "taler.net/taldir/cmd/taldir-server"
+  gnunetutil "git.gnunet.org/gnunet-go.git/pkg/util"
   "github.com/jarcoal/httpmock"
   "taler.net/taldir/pkg/util"
 )
@@ -82,7 +83,7 @@ func TestMain(m *testing.M) {
 func getHAddress(addr string) string {
   h := sha512.New()
   h.Write([]byte(addr))
-  return util.EncodeBinaryToString(h.Sum(nil))
+  return gnunetutil.EncodeBinaryToString(h.Sum(nil))
 }
 
 func TestNoEntry(s *testing.T) {
diff --git a/go.mod b/go.mod
index 8479075..2aac5b0 100644
--- a/go.mod
+++ b/go.mod
@@ -3,9 +3,13 @@ module taler.net/taldir
 go 1.16
 
 require (
+       git.gnunet.org/gnunet-go.git v0.1.28-0.20220717050634-369422be2512
+       github.com/bfix/gospel v1.2.15 // indirect
+       github.com/go-sql-driver/mysql v1.6.0 // indirect
        github.com/gorilla/mux v1.8.0
        github.com/jarcoal/httpmock v1.2.0
        github.com/jinzhu/now v1.1.5 // indirect
+       github.com/mattn/go-sqlite3 v1.14.14 // indirect
        github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
        golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect
        golang.org/x/text v0.3.7
diff --git a/pkg/rest/taldir.go b/pkg/rest/taldir.go
index 954ce4b..3977ba8 100644
--- a/pkg/rest/taldir.go
+++ b/pkg/rest/taldir.go
@@ -51,6 +51,7 @@ import (
   "gopkg.in/ini.v1"
   "strings"
   "github.com/skip2/go-qrcode"
+  gnunetutil "git.gnunet.org/gnunet-go.git/pkg/util"
   "golang.org/x/text/language"
 )
 
@@ -313,7 +314,7 @@ func saltHAddress(hAddress string, salt string) string {
   h := sha512.New()
   h.Write([]byte(hAddress))
   h.Write([]byte(salt))
-  return util.EncodeBinaryToString(h.Sum(nil))
+  return gnunetutil.EncodeBinaryToString(h.Sum(nil))
 }
 
 // Called by the registrant to validate the registration request. The 
reference ID was
@@ -390,6 +391,7 @@ func (t *Taldir) isRateLimited(hAddress string) (bool, 
error) {
   // NOTE: Check rate limit
   if err == nil {
     // Limit re-initiation attempts
+    // FIXME: Do not limit tries. Very unlikely.
     validationMetadata.InitiationCount++
     if 
time.Now().Before(validationMetadata.TimeframeStart.Add(t.ValidationTimeframe)) 
{
       if validationMetadata.InitiationCount > t.ValidationInitiationMax {
@@ -420,6 +422,16 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r 
*http.Request){
   var validation validation
   var entry entry
   var order Order
+  // Check if this validation method is supported or not.
+  if !t.Validators[vars["method"]] {
+    errDetail.Code = gana.TALDIR_METHOD_NOT_SUPPORTED
+    errDetail.Hint = "Unsupported method"
+    errDetail.Detail = "Given method: " + vars["method"]
+    resp, _ := json.Marshal(errDetail)
+    w.WriteHeader(http.StatusNotFound)
+    w.Write(resp)
+    return
+  }
   if r.Body == nil {
     http.Error(w, "No request body", 400)
     return
@@ -435,21 +447,11 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r 
*http.Request){
   }
   json.NewDecoder(r.Body).Decode(&order)
 
-  // Check if this validation method is supported or not.
-  if !t.Validators[vars["method"]] {
-    errDetail.Code = gana.TALDIR_METHOD_NOT_SUPPORTED
-    errDetail.Hint = "Unsupported method"
-    errDetail.Detail = "Given method: " + vars["method"]
-    resp, _ := json.Marshal(errDetail)
-    w.WriteHeader(http.StatusNotFound)
-    w.Write(resp)
-    return
-  }
   // Setup validation object. Retrieve object from DB if it already
   // exists.
   h := sha512.New()
   h.Write([]byte(req.Address))
-  hAddress := util.EncodeBinaryToString(h.Sum(nil))
+  hAddress := gnunetutil.EncodeBinaryToString(h.Sum(nil))
   validation.HAddress = hAddress
   hsAddress := saltHAddress(validation.HAddress, t.Salt)
   err = t.Db.First(&entry, "hs_address = ?", hsAddress).Error
@@ -487,6 +489,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r 
*http.Request){
     t.Db.Delete(&validation)
     return
   }
+  // FIXME try to avoid validationMetadata
   err = t.Db.First(&validation, "h_address = ? AND public_key = ? AND inbox = 
? AND duration = ?",
                                 hAddress, req.PublicKey, req.Inbox, 
reqDuration).Error
   validationExists := (nil == err)
@@ -500,6 +503,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r 
*http.Request){
     validation.Duration = reqDuration.Microseconds()
   }
 
+  // FIXME: integer arithmetic
   fixedCost := t.Cfg.Section("taldir-" + 
vars["method"]).Key("challenge_fee").MustString("KUDOS:0")
   sliceDuration := time.Duration(validation.Duration * 1000)
   cost, currency, err := util.CalculateCost(t.MonthlyFee,
@@ -514,8 +518,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r 
*http.Request){
   if cost > 0 {
     if validationExists {
       if order.ID != validation.OrderID {
-        log.Fatalf("Order ID is not validation ID what to do?")
-        w.WriteHeader(http.StatusInternalServerError)
+        w.WriteHeader(http.StatusConflict)
         return
       }
     }
@@ -531,6 +534,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r 
*http.Request){
 
     // FIXME what if provided order ID and validation order ID differ???
     // Check if order paid. FIXME: How to check if this the a correct order??
+    // FIXME: Remember that it was activated and paid
     payto, paytoErr := t.Merchant.IsOrderPaid(validation.OrderID)
     if paytoErr != nil {
       w.WriteHeader(http.StatusInternalServerError)
@@ -540,7 +544,7 @@ func (t *Taldir) registerRequest(w http.ResponseWriter, r 
*http.Request){
     if len(payto) != 0 {
       t.Db.Save(&validation)
       w.WriteHeader(http.StatusPaymentRequired)
-      w.Header().Set("Location", payto) // FIXME no idea what to do with this.
+      w.Header().Set("Taler", payto) // FIXME no idea what to do with this.
       return
     }
     // In this case, this order was paid
diff --git a/pkg/util/base32.go b/pkg/util/base32.go
deleted file mode 100644
index f0b149a..0000000
--- a/pkg/util/base32.go
+++ /dev/null
@@ -1,127 +0,0 @@
-// This file is part of gnunet-go, a GNUnet-implementation in Golang.
-// Copyright (C) 2019-2022 Bernd Fix  >Y<
-//
-// gnunet-go is free software: you can redistribute it and/or modify it
-// under the terms of the GNU Affero General Public License as published
-// by the Free Software Foundation, either version 3 of the License,
-// or (at your option) any later version.
-//
-// gnunet-go is distributed in the hope that it will be useful, but
-// WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-// Affero General Public License for more details.
-//
-// You should have received a copy of the GNU Affero General Public License
-// along with this program.  If not, see <http://www.gnu.org/licenses/>.
-//
-// SPDX-License-Identifier: AGPL3.0-or-later
-
-package util
-
-import (
-       "errors"
-       "strings"
-)
-
-//------------------------------------------------------------------------
-// Base32 conversion between binary data and string representation
-//------------------------------------------------------------------------
-//
-// A binary array of size m is viewed as a consecutive stream of bits
-// from left to right. Bytes are ordered with ascending address, while
-// bits (in a byte) are ordered MSB to LSB.
-
-// For encoding the stream is partitioned into 5-bit chunks; the last chunk
-// is right-padded with 0's if 8*m is not divisible by 5. Each chunk (value
-// between 0 and 31) is encoded into a character; the mapping for encoding
-// is the same as in [https://www.crockford.com/wrmg/base32.html].
-//
-// For decoding each character is converted to a 5-bit chunk based on the
-// encoder mapping (with one addition: the character 'U' maps to the value
-// 27). The chunks are concatenated to produce the bit stream to be stored
-// in the output array.
-
-// character set used for encoding/decoding
-const xlate = "0123456789ABCDEFGHJKMNPQRSTVWXYZ"
-
-var (
-       // ErrInvalidEncoding signals an invalid encoding
-       ErrInvalidEncoding = errors.New("Invalid encoding")
-       // ErrBufferTooSmall signalsa too small buffer for decoding
-       ErrBufferTooSmall = errors.New("Buffer to small")
-)
-
-// EncodeBinaryToString encodes a byte array into a string.
-func EncodeBinaryToString(data []byte) string {
-       size, pos, bits, n := len(data), 0, 0, 0
-       out := ""
-       for {
-               if n < 5 {
-                       if pos < size {
-                               bits = (bits << 8) | (int(data[pos]) & 0xFF)
-                               pos++
-                               n += 8
-                       } else if n > 0 {
-                               bits <<= uint(5 - n)
-                               n = 5
-                       } else {
-                               break
-                       }
-               }
-               out += string(xlate[(bits>>uint(n-5))&0x1F])
-               n -= 5
-       }
-       return out
-}
-
-// DecodeStringToBinary decodes a string into a byte array.
-// The function expects the size of the output buffer to be sepcified as an
-// argument ('num'); the function returns an error if the buffer is overrun
-// or if an invalid character is found in the encoded string. If the decoded
-// bit stream is smaller than the output buffer, it is padded with 0's.
-func DecodeStringToBinary(s string, num int) ([]byte, error) {
-       size := len(s)
-       out := make([]byte, num)
-       rpos, wpos, n, bits := 0, 0, 0, 0
-       for {
-               if n < 8 {
-                       if rpos < size {
-                               c := rune(s[rpos])
-                               rpos++
-                               v := strings.IndexRune(xlate, c)
-                               if v == -1 {
-                                       switch c {
-                                       case 'O':
-                                               v = 0
-                                       case 'I', 'L':
-                                               v = 1
-                                       case 'U':
-                                               v = 27
-                                       default:
-                                               return nil, ErrInvalidEncoding
-                                       }
-                               }
-                               bits = (bits << 5) | (v & 0x1F)
-                               n += 5
-                       } else {
-                               if wpos < num {
-                                       out[wpos] = byte(bits & ((1 << 
uint(n+1)) - 1))
-                                       wpos++
-                                       for i := wpos; i < num; i++ {
-                                               out[i] = 0
-                                       }
-                               }
-                               break
-                       }
-               } else {
-                       if wpos < num {
-                               out[wpos] = byte((bits >> uint(n-8)) & 0xFF)
-                               wpos++
-                               n -= 8
-                       } else {
-                               return nil, ErrBufferTooSmall
-                       }
-               }
-       }
-       return out, nil
-}
diff --git a/pkg/util/helper.go b/pkg/util/helper.go
index 27d92fb..03fb92b 100644
--- a/pkg/util/helper.go
+++ b/pkg/util/helper.go
@@ -27,12 +27,13 @@ import (
   "strings"
   "strconv"
   "time"
+  gnunetutil "git.gnunet.org/gnunet-go.git/pkg/util"
 )
 
 
 // Generates a solution from a challenge and pubkey
 func GenerateSolution(pubkeyEncoded string, challenge string) string {
-  pubkey, err := DecodeStringToBinary(pubkeyEncoded, 36)
+  pubkey, err := gnunetutil.DecodeStringToBinary(pubkeyEncoded, 36)
   if err != nil {
     fmt.Println("error decoding pubkey:", err)
     return ""
@@ -40,7 +41,7 @@ func GenerateSolution(pubkeyEncoded string, challenge string) 
string {
   h := sha512.New()
   h.Write([]byte(challenge))
   h.Write(pubkey)
-  return EncodeBinaryToString(h.Sum(nil))
+  return gnunetutil.EncodeBinaryToString(h.Sum(nil))
 }
 
 // Generates random reference token used in the validation flow.
@@ -50,7 +51,7 @@ func GenerateChallenge(bytes int) string {
   if err != nil {
     panic(err)
   }
-  return EncodeBinaryToString(randBytes)
+  return gnunetutil.EncodeBinaryToString(randBytes)
 }
 
 // Check if this is a non-zero, positive amount

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]