[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-taldir] branch master updated: towards new API
From: |
gnunet |
Subject: |
[taler-taldir] branch master updated: towards new API |
Date: |
Mon, 04 Jul 2022 22:49:16 +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 c1fc528 towards new API
c1fc528 is described below
commit c1fc528c65134d9eeeb4ff5550513dab00101245
Author: Martin Schanzenbach <schanzen@gnunet.org>
AuthorDate: Mon Jul 4 22:49:13 2022 +0200
towards new API
---
taldir.go | 103 ++++++++++++++++++++++++++++++++++++++++++++------------------
1 file changed, 74 insertions(+), 29 deletions(-)
diff --git a/taldir.go b/taldir.go
index 2c7aa73..3ba1bc0 100644
--- a/taldir.go
+++ b/taldir.go
@@ -90,12 +90,49 @@ type Entry struct {
// depending on the out-of-band chennel defined through the identity key type.
type Validation struct {
gorm.Model
- IdentityKey string `json:"identity_key"`
- IdentityKeyType string `json:"identity_key_type"`
+ HAddress string `json:"h_address"`
+ Method string `json:"method"`
ValidationReference string `json:"reference"`
- TalerWalletKey string `json:"taler_wallet_key"`
+ PublicKey string `json:"public_key"`
}
+type ErrorDetail struct {
+
+ // Numeric error code unique to the condition.
+ // The other arguments are specific to the error value reported here.
+ Code int `json:"code"`
+
+ // Human-readable description of the error, i.e. "missing parameter",
"commitment violation", ...
+ // Should give a human-readable hint about the error's nature. Optional, may
change without notice!
+ Hint string `json:"hint,omitempty"`
+
+ // Optional detail about the specific input value that failed. May change
without notice!
+ Detail string `json:"detail,omitempty"`
+
+ // Name of the parameter that was bogus (if applicable).
+ Parameter string `json:"parameter,omitempty"`
+
+ // Path to the argument that was bogus (if applicable).
+ Path string `json:"path,omitempty"`
+
+ // Offset of the argument that was bogus (if applicable).
+ Offset string `json:"offset,omitempty"`
+
+ // Index of the argument that was bogus (if applicable).
+ Index string `json:"index,omitempty"`
+
+ // Name of the object that was bogus (if applicable).
+ Object string `json:"object,omitempty"`
+
+ // Name of the currency than was problematic (if applicable).
+ Currency string `json:"currency,omitempty"`
+
+ // Expected type (if applicable).
+ Type_expected string `json:"type_expected,omitempty"`
+
+ // Type that was provided instead (if applicable).
+ Type_actual string `json:"type_actual,omitempty"`
+}
// The main DB handle
var db *gorm.DB
@@ -132,7 +169,7 @@ func sendEmail(recipient string, ref Validation) {
// Primary lookup function.
// Allows the caller to query a wallet key using the hash(!) of the
// identity, e.g. sha256(<email address>)
-func returnSingleEntry(w http.ResponseWriter, r *http.Request){
+/*func returnSingleEntry(w http.ResponseWriter, r *http.Request){
vars := mux.Vars(r)
var entry Entry
identityKeyHash := hashIdentityKey(vars["identity_key"])
@@ -143,7 +180,7 @@ func returnSingleEntry(w http.ResponseWriter, r
*http.Request){
return
}
w.WriteHeader(http.StatusNotFound)
-}
+}*/
// Hashes an identity key (e.g. sha256(<email address>)) with a salt for
// Lookup and storage.
@@ -161,7 +198,7 @@ func hashIdentityKey(idkey string) string {
// Called by the registrant to validate the registration request. The
reference ID was
// provided "out of band" using a validation method such as email or SMS
-func validateSingleEntry(w http.ResponseWriter, r *http.Request){
+/*func validateSingleEntry(w http.ResponseWriter, r *http.Request){
vars := mux.Vars(r)
var entry Entry
var validation Validation
@@ -190,7 +227,7 @@ func validateSingleEntry(w http.ResponseWriter, r
*http.Request){
return
}
w.WriteHeader(http.StatusCreated)
-}
+}*/
// Generates random reference token used in the validation flow.
@@ -204,48 +241,56 @@ func generateToken() string {
}
func registerRequest(w http.ResponseWriter, r *http.Request){
- //vars := mux.Vars(r)
+ vars := mux.Vars(r)
var req RegisterMessage
+ var errDetail ErrorDetail
+ var validation Validation
if r.Body == nil {
http.Error(w, "No request body", 400)
return
}
err := json.NewDecoder(r.Body).Decode(&req)
if err != nil {
- http.Error(w, err.Error(), 400)
+ errDetail.Code = 1006 //TALER_EC_JSON_INVALID
+ errDetail.Hint = "Unable to parse JSON"
+ resp, _ := json.Marshal(errDetail)
+ w.WriteHeader(400)
+ w.Write(resp)
return
}
- fmt.Println(validators)
- /*if !validators[validation.IdentityKeyType] {
- http.Error(w, "Identity key type not supported.", 400)
+ if !validators[vars["method"]] {
+ errDetail.Code = 3 //TALER_EC_NOT_IMPLEMENTED
+ errDetail.Hint = "Unsupported method"
+ errDetail.Detail = "Given method: " + vars["method"]
+ resp, _ := json.Marshal(errDetail)
+ w.WriteHeader(404)
+ w.Write(resp)
return
}
// TODO make sure sha256(vars["identity"]) == validation.IdentityKey or
simply set it?
h := sha256.New()
- h.Write([]byte(vars["identity"]))
- identityKey := base32.StdEncoding.EncodeToString(h.Sum(nil))
- if "" != validation.IdentityKey {
- if (identityKey != validation.IdentityKey) {
- fmt.Printf("Identity key hash %s does not match identity %s\n",
identityKey, validation.IdentityKey)
- w.WriteHeader(http.StatusBadRequest)
- return
- }
- } else {
- validation.IdentityKey = identityKey
- }
+ h.Write([]byte(req.Address))
+ validation.HAddress = base32.StdEncoding.EncodeToString(h.Sum(nil))
validation.ValidationReference = generateToken()
- err = db.First(&validation, "identity_key = ?", validation.IdentityKey).Error
+ err = db.First(&validation, "h_address = ?", validation.HAddress).Error
if err == nil {
- w.WriteHeader(http.StatusConflict)
+ // FIXME: We need to handle this properly:
+ // Registration already exists for this address for the specified duration.
+ // Returns for how long this registration is paid for.
+ w.WriteHeader(200)
return
}
err = db.Create(&validation).Error
if err != nil {
+ // FIXME: API needs 400 error codes in such cases
w.WriteHeader(http.StatusInternalServerError)
return
}
- fmt.Println("Pending validation created:", validation)
- sendEmail(vars["identity"], validation)*/
+ fmt.Println("Address registration request created:", validation)
+ w.WriteHeader(202)
+ // FIXME: Here we should call the validator shell script with the
+ // parsed parameters to initiate the validation.
+ sendEmail(vars["identity"], validation)
}
func notImplemented(w http.ResponseWriter, r *http.Request) {
@@ -285,8 +330,8 @@ func handleRequests() {
/* Registration API */
- myRouter.HandleFunc("/directory/{identity_key}",
returnSingleEntry).Methods("GET")
- myRouter.HandleFunc("/validation/{reference}",
validateSingleEntry).Methods("GET")
+ //myRouter.HandleFunc("/directory/{identity_key}",
returnSingleEntry).Methods("GET")
+ //myRouter.HandleFunc("/validation/{reference}",
validateSingleEntry).Methods("GET")
myRouter.HandleFunc("/register/{method}", registerRequest).Methods("POST")
log.Fatal(http.ListenAndServe(cfg.Section("taldir").Key("bind_to").MustString("localhost:11000"),
myRouter))
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-taldir] branch master updated: towards new API,
gnunet <=