gnunet-svn
[Top][All Lists]
Advanced

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

[taler-challenger] branch master updated: rudimentary test skeleton


From: gnunet
Subject: [taler-challenger] branch master updated: rudimentary test skeleton
Date: Sat, 06 May 2023 22:32:39 +0200

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

grothoff pushed a commit to branch master
in repository challenger.

The following commit(s) were added to refs/heads/master by this push:
     new 424489c  rudimentary test skeleton
424489c is described below

commit 424489cfc265a452fe0105d31a5df556d445fd04
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat May 6 22:32:35 2023 +0200

    rudimentary test skeleton
---
 src/challenger/Makefile.am              |  18 +++-
 src/challenger/cat.sh                   |   3 +
 src/challenger/challenger-send-email.sh |   3 +
 src/challenger/challenger-send-post.sh  | 185 ++++++++++++++++++++++++++++++++
 src/challenger/challenger-send-sms.sh   |  28 +++++
 src/challenger/challenger.conf          |  10 ++
 src/challenger/test-challenger.conf     |  11 ++
 src/challenger/test-challenger.sh       |  72 +++++++++++++
 src/challengerdb/challenger-0001.sql    |   6 +-
 src/util/challenger-config.in           |   2 +-
 10 files changed, 333 insertions(+), 5 deletions(-)

diff --git a/src/challenger/Makefile.am b/src/challenger/Makefile.am
index 58fbac2..f7a3933 100644
--- a/src/challenger/Makefile.am
+++ b/src/challenger/Makefile.am
@@ -15,6 +15,17 @@ bin_PROGRAMS = \
   challenger-admin \
   challenger-httpd
 
+bin_SCRIPTS = \
+  challenger-send-email.sh \
+  challenger-send-post.sh \
+  challenger-send-sms.sh
+
+check_SCRIPTS = \
+  test-challenger.sh
+
+TESTS = \
+  $(check_SCRIPTS)
+
 challenger_admin_SOURCES = \
   challenger-admin.c
 challenger_admin_LDADD = \
@@ -50,4 +61,9 @@ challenger_httpd_LDADD = \
   $(XLIB)
 
 EXTRA_DIST = \
-  $(pkgcfg_DATA)
+  cat.sh \
+  challenger.conf \
+  test-challenger.conf \
+  $(pkgcfg_DATA) \
+  $(bin_SCRIPTS) \
+  $(check_SCRIPTS)
diff --git a/src/challenger/cat.sh b/src/challenger/cat.sh
new file mode 100644
index 0000000..dad804d
--- /dev/null
+++ b/src/challenger/cat.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# This file is in the public domain.
+cat - > "$1"
diff --git a/src/challenger/challenger-send-email.sh 
b/src/challenger/challenger-send-email.sh
new file mode 100755
index 0000000..738aaf0
--- /dev/null
+++ b/src/challenger/challenger-send-email.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+# This file is in the public domain.
+exec mail -s "Anastasis" -r noreply "$1"
diff --git a/src/challenger/challenger-send-post.sh 
b/src/challenger/challenger-send-post.sh
new file mode 100755
index 0000000..fb3221f
--- /dev/null
+++ b/src/challenger/challenger-send-post.sh
@@ -0,0 +1,185 @@
+#!/bin/bash
+# This file is in the public domain.
+set -eu
+
+# Theses are Anastasis SARL specific, do not share!
+# CLIENT_ID=
+# CLIENT_SECRET=
+# ORG_ID=
+. pingen-secrets
+
+ENDPOINT="https://api.v2.pingen.com";
+LOGS="$PWD/authorization-post.log"
+
+MESSAGE=`cat -`
+DATE=`date +%F`
+ADDR="$1"
+NAME=`echo $ADDR | jq -r .full_name`
+STREET=`echo $ADDR | jq -r .street`
+
+LNUMBER=`echo $STREET | awk '{print $NF}'`
+FNUMBER=`echo $STREET | awk '{print $1}'`
+case $LNUMBER in
+    ''|*[!0-9]*)
+       case $FNUMBER in
+           ''|*[!0-9]*)
+               NUMBER=0
+               ;;
+           *)
+               NUMBER=$FNUMBER
+               ;;
+       esac
+       ;;
+    *)
+       NUMBER=$LNUMBER
+       ;;
+esac
+
+
+CITY=`echo $ADDR | jq -r .city`
+POSTCODE=`echo $ADDR | jq -r .postcode`
+COUNTRY=`echo $ADDR | jq -r .country`
+
+MYDIR=`mktemp -d /tmp/authorization-post-XXXXXX`
+cd "$MYDIR"
+cat - | sed -e "s/%NAME%/$NAME/g" \
+           -e "s/%STREET%/$STREET/g" \
+           -e "s/%POSTCODE%/$POSTCODE/g" \
+           -e "s/%CITY%/$CITY/g" \
+           -e "s/%COUNTRY%/$COUNTRY/g" \
+           -e "s/%MESSAGE%/$MESSAGE/g" > input.tex <<EOF
+\NeedsTeXFormat{LaTeX2e}
+\documentclass[fontsize=11pt,a4paper]{scrlttr2}
+\makeatletter
+\KOMAoptions{foldmarks=off}
+%\@setplength{toaddrvpos}{30mm}
+%\@setplength{toaddrhpos}{130mm}
+%\@setplength{sigbeforevskip}{10mm}
+\makeatother
+\setkomavar{subject}{Anastasis Recovery}
+%\setkomavar{fromname}{Anastasis SARL}
+\setkomavar{signature}{Anastasis SARL}
+\date{\today}
+%\address{Anastasis SARL \\\\ 7 rue de Mondorf \\\\ 5431 Erpeldange}
+%\signature{Anastasis SARL}
+\begin{document}
+\begin{letter}{\ \ %NAME% \\\\ \ \ %STREET% \\\\ \ \ %POSTCODE% %CITY% \\\\ \ 
\ %COUNTRY% }
+\opening{To whom it may concern,}
+%MESSAGE%
+\closing{Best regards}
+\end{letter}
+\end{document}
+EOF
+pdflatex input.tex > /dev/null 2> /dev/null
+
+REPLY=`curl -s -X POST -H "Content-Type: application/x-www-form-urlencoded" \
+    --data-urlencode "grant_type=client_credentials" \
+    --data-urlencode "client_id=$CLIENT_ID" \
+    --data-urlencode "client_secret=$CLIENT_SECRET" \
+    --data-urlencode "scope=letter" \
+    https://identity.pingen.com/auth/access-tokens`
+
+ACCESS_TOKEN=`echo $REPLY | jq -r .access_token`
+
+REPLY=`curl -s \
+    -X GET "$ENDPOINT/file-upload" \
+    -H  "Authorization: Bearer $ACCESS_TOKEN"`
+ATTRS=`echo $REPLY | jq .data.attributes`
+UPLOAD_URL=`echo $ATTRS | jq -r .url`
+URL_SIG=`echo $ATTRS | jq -r .url_signature`
+
+curl -s -X PUT -T input.pdf $UPLOAD_URL
+
+
+RECIPIENT="$(jq -n '
+    {
+        name: $NAME,
+        street: $STREET,
+       number: $NUMBER,
+        city: $CITY,
+        zip: $POSTCODE,
+        country: $COUNTRY,
+    }' \
+    --arg NAME "$NAME" \
+    --arg STREET "$STREET" \
+    --arg NUMBER "$NUMBER" \
+    --arg CITY "$CITY" \
+    --arg POSTCODE "$POSTCODE" \
+    --arg COUNTRY "$COUNTRY" \
+  )"
+
+SENDER="$(jq -n '
+    {
+        name: "Anastasis SARL",
+        street: "Rue de Mondorf",
+       number: "7",
+       zip: "5421",
+       city: "Erpeldange",
+       country: "LU"
+    }' 
+  )"
+
+REQUEST="$(jq -n '
+    {   data: {
+        type: "letters",
+       attributes: {
+         file_original_name: "input.pdf",
+         file_url: $UPLOAD_URL,
+         file_url_signature: $URL_SIG,
+         address_position: "left",
+         delivery_product: "cheap",
+         print_mode: "duplex",
+         auto_send: true,
+         print_spectrum: "grayscale"
+        } }
+    }' \
+    --argjson RECIPIENT "$RECIPIENT" \
+    --argjson SENDER "$SENDER" \
+    --arg UPLOAD_URL "$UPLOAD_URL" \
+    --arg URL_SIG "$URL_SIG" \
+  )"
+
+STATUS=$(curl -s --request POST \
+     --url $ENDPOINT/organisations/${ORG_ID}/letters \
+     --header 'Content-Type: application/vnd.api+json' \
+     --header "Authorization: Bearer $ACCESS_TOKEN" \
+     -d "$REQUEST" \
+     -o $MYDIR/final-reply.txt \
+     -w "%{http_code}" -s)
+cat $MYDIR/final-reply.txt >> $LOGS
+case $STATUS in
+    201)
+        ;;
+    *)
+        echo "Failed to add letter: $STATUS" >> $LOGS
+       echo $REPLY
+        exit 1;
+        ;;
+esac
+LETTER_ID=`cat $MYDIR/final-reply.txt | jq -r .data.id`
+REPLY=$MYDIR/delete-reply.txt
+STATUS=409
+sleep 1;
+while test $STATUS = 409;
+do
+  STATUS=$(curl -s --request DELETE \
+          --url $ENDPOINT/organisations/$ORG_ID/letters/$LETTER_ID \
+          --header "Authorization: Bearer $ACCESS_TOKEN" \
+          -o $REPLY \
+          -w "%{http_code}" -s)
+  case $STATUS in
+    204)
+       cat $REPLY >> $LOGS
+        ;;
+    409)
+       # Happens, likely still in processing...
+       ;;
+    *)
+        echo "Failed to delete letter: $STATUS" >> $LOGS
+        ;;
+  esac
+done
+
+rm -r $MYDIR
+
+exit 0
diff --git a/src/challenger/challenger-send-sms.sh 
b/src/challenger/challenger-send-sms.sh
new file mode 100755
index 0000000..ddfc649
--- /dev/null
+++ b/src/challenger/challenger-send-sms.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+# This file is in the public domain.
+set -eu
+. telesign-secrets
+# Set AUTH_TOKEN=...
+
+MESSAGE=`cat -`
+TMPFILE=`mktemp /tmp/sms-loggingXXXXXX`
+STATUS=$(curl --request POST \
+     --url https://rest-api.telesign.com/v1/messaging \
+     --header 'authorization: Basic $AUTH_TOKEN' \
+     --header 'content-type: application/x-www-form-urlencoded' \
+     --data account_livecycle_event=transact \
+     --data "message=$MESSAGE" \
+     --data message_type=OTP \
+     --data "phone_number=$1" \
+     -w "%{http_code}" -s -o $TMPFILE)
+echo `cat $TMPFILE` >> /var/log/sms.log
+rm -f $TMPFILE
+case $STATUS in
+    200|203|250|290|291|295)
+        exit 0;
+        ;;
+    *)
+        exit 1;
+        ;;
+esac
+exit 1
diff --git a/src/challenger/challenger.conf b/src/challenger/challenger.conf
index 92da7f5..a167332 100644
--- a/src/challenger/challenger.conf
+++ b/src/challenger/challenger.conf
@@ -27,3 +27,13 @@ DB = postgres
 # How long is an individual validation request valid?
 VALIDATION_DURATION = 1d
 
+# How long is an validation valid?
+VALIDATION_EXPIRATION = 365d
+
+# Which external command should be used to transmit challenges?
+# Example commands are challenger-send-{sms,email,post}.sh
+# AUTH_COMMAND =
+
+
+# What address type are we validating? (SMS, e-mail, etc.)
+# ADDRESS_TYPE =
diff --git a/src/challenger/test-challenger.conf 
b/src/challenger/test-challenger.conf
new file mode 100644
index 0000000..8bc1c2e
--- /dev/null
+++ b/src/challenger/test-challenger.conf
@@ -0,0 +1,11 @@
+[challenger]
+
+# Which external command should be used to transmit challenges?
+AUTH_COMMAND = cat.sh
+
+# What address type are we validating? (SMS, e-mail, etc.)
+ADDRESS_TYPE = file-access
+
+[challengerdb-postgres]
+#The connection string the plugin has to use for connecting to the database
+CONFIG = postgres:///talercheck
diff --git a/src/challenger/test-challenger.sh 
b/src/challenger/test-challenger.sh
new file mode 100755
index 0000000..ba4bb17
--- /dev/null
+++ b/src/challenger/test-challenger.sh
@@ -0,0 +1,72 @@
+#!/bin/bash
+# This file is in the public domain.
+
+set -eu
+
+# Exit, with status code "skip" (no 'real' failure)
+function exit_skip() {
+    echo " SKIP: $1"
+    exit 77
+}
+
+# Exit, with error message (hard failure)
+function exit_fail() {
+    echo " FAIL: $1"
+    exit 1
+}
+
+# Cleanup to run whenever we exit
+function cleanup()
+{
+    for n in `jobs -p`
+    do
+        kill $n 2> /dev/null || true
+    done
+    wait
+}
+
+# Install cleanup handler (except for kill -9)
+trap cleanup EXIT
+
+echo -n "Testing for jq"
+jq -h > /dev/null || exit_skip "jq required"
+echo " FOUND"
+echo -n "Testing for curl"
+curl -h > /dev/null || exit_skip "curl required"
+echo " FOUND"
+echo -n "Testing for wget"
+wget -h > /dev/null || exit_skip "wget required"
+echo " FOUND"
+echo -n "Testing for challenger-httpd ..."
+challenger-httpd -h > /dev/null || exit_skip "challenger-httpd required"
+echo " FOUND"
+
+CONF="test-challenger.conf"
+BURL="http://localhost:9967";
+
+echo -n "Initialize challenger database ..."
+challenger-dbinit -r -c "${CONF}" &> dbinit.log
+echo " OK"
+
+echo -n "Start challenger-httpd ..."
+challenger-httpd -c "${CONF}" &> httpd.log &
+
+# Wait for challenger to be available
+for n in `seq 1 50`
+do
+    echo -n "."
+    sleep 0.2
+    OK=0
+    # bank
+    wget --tries=1 --timeout=1 "${BURL}/config" -o /dev/null -O /dev/null 
>/dev/null || continue
+    OK=1
+    break
+done
+if [ 1 != $OK ]
+then
+    exit_skip "Failed to launch challenger service"
+fi
+
+
+
+exit 0
diff --git a/src/challengerdb/challenger-0001.sql 
b/src/challengerdb/challenger-0001.sql
index 6a53734..bf765b7 100644
--- a/src/challengerdb/challenger-0001.sql
+++ b/src/challengerdb/challenger-0001.sql
@@ -27,7 +27,7 @@ SET search_path TO challenger;
 
 
 CREATE TABLE IF NOT EXISTS clients
-  (client_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY
+  (client_serial_id BIGINT UNIQUE GENERATED BY DEFAULT AS IDENTITY
   ,url VARCHAR NOT NULL
   ,validation_counter INT8 NOT NULL DEFAULT(0)
   ,client_secret VARCHAR NOT NULL
@@ -46,7 +46,7 @@ CREATE INDEX IF NOT EXISTS clients_serial
   ON clients (client_serial_id);
 
 CREATE TABLE IF NOT EXISTS validations
-  (validation_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY
+  (validation_serial_id BIGINT GENERATED BY DEFAULT AS IDENTITY UNIQUE
   ,client_serial_id INT8 NOT NULL REFERENCES clients (client_serial_id)
   ,nonce BYTEA CHECK (length(nonce)=32) UNIQUE
   ,expiration_time INT8 NOT NULL
@@ -71,7 +71,7 @@ COMMENT ON COLUMN validations.client_scope
  IS 'Client-specific scope value identifying the requested scope';
 COMMENT ON COLUMN validations.client_state
  IS 'Client-specific state value identifying the purpose of the validation';
-COMMENT ON COLUMN validations.client_redirect_uri
+COMMENT ON COLUMN validations.client_redirect_url
  IS 'Client-specific URI where to redirect the user-agent back once access is 
granted (or denied)';
 COMMENT ON COLUMN validations.address
   IS 'Address we are validating; provided by the user-agent; usually a phone 
number or e-mail address (depends on the client_scope)';
diff --git a/src/util/challenger-config.in b/src/util/challenger-config.in
index b1c4971..041f1d8 100644
--- a/src/util/challenger-config.in
+++ b/src/util/challenger-config.in
@@ -8,6 +8,6 @@ if ! type gnunet-config >/dev/null; then
 fi
 
 GC=`which gnunet-config`
-SO=`ls %libdir%/libsyncutil.so.* | sort -n | tail -n1`
+SO=`ls %libdir%/libchallengerutil.so.* | sort -n | tail -n1`
 export LD_PRELOAD=${LD_PRELOAD:-}:${SO}
 exec gnunet-config "$@"

-- 
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]