diff --git a/.env b/.env index e5b892ca7a2062c59ccb9e37659d788c7b02655c..a3d372cd2bdb1f9a75431f788cc11abc1385e4b7 100644 --- a/.env +++ b/.env @@ -15,6 +15,6 @@ HANDLE_SERVER_LOG_SAVE_INTERVAL="Monthly" # HANDLE_SERVER_HOME_PREFIX without "0.NA/" prefix. -HANDLE_SERVER_HOME_PREFIX="0.TEST" +HANDLE_SERVER_HOME_PREFIX="TEST" # USE_PUBLIC_HANDLE_SYSTEM="TRUE" USE_PUBLIC_HANDLE_SYSTEM="FALSE" diff --git a/Makefile b/Makefile index ac4ce1f510d6ecbd8fd90be94e76f8546774aab0..9ae9fc0b425d59f4ff75953bfeca35793ed6722e 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ start: .handle @echo "Start Handle System" docker compose up --build --detach - . ./.env && docker exec $${COMPOSE_PROJECT_NAME}-hs-server /hs/templates/wait-for-it.sh $${HANDLE_SERVER_IPV4_ADDRESS}:8000 -t 500 -- echo "HANDLE SERVICE ONLINE" - . ./.env && docker exec $${COMPOSE_PROJECT_NAME}-hs-server bin/hdl-genericbatch /hs/setup.batch.hdl + . ./.env && docker exec $${COMPOSE_PROJECT_NAME}-hs-server /hs/templates/wait-for-it.sh $${HANDLE_SERVER_IPV4_ADDRESS}:$${HANDLE_SERVER_HTTP_PORT} -t 500 -- echo "HANDLE SERVICE ONLINE" + . ./.env ; [ "$${USE_PUBLIC_HANDLE_SYSTEM}" = "TRUE" ] || docker exec $${COMPOSE_PROJECT_NAME}-hs-server bin/hdl-genericbatch /hs/setup.batch.hdl .handle: mkdir $@ diff --git a/docker-compose.yml b/docker-compose.yml index 195fb82a960d22ed93f8af758f5a7e466f753c74..fce44c8d6c859fbe30a2410c536d349f7a0f17bc 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,10 @@ services: hs-network: ipv4_address: ${HANDLE_SERVER_IPV4_ADDRESS} volumes: + ## make handle server persistent + #- type: bind + # source: /var/lib/hs/srv_1 + # target: /hs/srv_1 - hs-srv1:/hs/srv_1 - type: bind source: ./.handle/ diff --git a/handle_server/Dockerfile b/handle_server/Dockerfile index d8fee09490bc1850dd6edf79c6bc02fa02e2b3a6..632836559069d89f6860a87ea21edd1eef025c87 100644 --- a/handle_server/Dockerfile +++ b/handle_server/Dockerfile @@ -17,7 +17,10 @@ WORKDIR /hs/handle-${HANDLE_SERVER_VERSION} COPY ./run_handle_server.sh ./ COPY ./generate_keys.sh ./ -COPY ./generate_siteinfo.sh ./ +COPY ./update_config.sh ./ +COPY ./private.defaults.sh ./ +COPY ./public.defaults.sh ./ +COPY ./update_siteinfo.sh ./ COPY ./templates /hs/templates diff --git a/handle_server/generate_keys.sh b/handle_server/generate_keys.sh index 3ab8f4fea2147fbb82fa97b3b4a06b9bd74f7d31..5fad4d20a8632f6fe4a65a5a0c36c51f3403f0f3 100755 --- a/handle_server/generate_keys.sh +++ b/handle_server/generate_keys.sh @@ -2,7 +2,7 @@ PUBKEY=${PUBKEY:-"pubkey"} PRIVKEY=${PRIVKEY:-"privkey"} -HDL_CMD=${HDL_CMD:-"/home/tf/src/fdo/handle-server/handle-9.3.1/bin/hdl"} +HDL_CMD=${HDL_CMD:-"bin/hdl"} CONVERT="$HDL_CMD convert-key" openssl genrsa -out ${PRIVKEY}.pem 2048 diff --git a/handle_server/generate_siteinfo.sh b/handle_server/generate_siteinfo.sh deleted file mode 100755 index 0042b84c6a0ba35ba3b25899264457e31446a142..0000000000000000000000000000000000000000 --- a/handle_server/generate_siteinfo.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -. ../.env - -RSA_KEY_N="$(cat pubkey.json | jq .n)" -RSA_KEY_E="$(cat pubkey.json | jq .e)" - -sed "s/__DESCRIPTION__/${HANDLE_SERVER_DESCRIPTION}/g" siteinfo.template.json \ - | sed "s/__ADDRESS__/${HANDLE_SERVER_IPV4_ADDRESS}/g" \ - | sed "s/\"__KEY_N__\"/${RSA_KEY_N}/g" \ - | sed "s/\"__KEY_E__\"/${RSA_KEY_E}/g" \ - > siteinfo.json diff --git a/handle_server/private.defaults.sh b/handle_server/private.defaults.sh new file mode 100644 index 0000000000000000000000000000000000000000..f0861b5fe8a7729fc4bfae4923909cc39141cc91 --- /dev/null +++ b/handle_server/private.defaults.sh @@ -0,0 +1,21 @@ +# default values for a private handle system + +HTTP_HEADERS='"Access-Control-Allow-Origin" = "*"' +ENABLE_MONITOR_DAEMON='"enable_monitor_daemon" = "yes"' +ALLOW_NA_ADMINS='"allow_na_admins" = "no"' +TEMPLATE_NS_OVERRIDE='"template_ns_override" = "yes"' +SERVER_ADMINS="300:${HANDLE_SERVER_HOME_PREFIX}/ADMIN" +REPLICATION_ADMINS="${SERVER_ADMINS}" +ALLOW_RECURSION='"allow_recursion" = "yes"' + +AUTO_HOMED_PREFIXES=" +" +read -d '' AUTO_HOMED_PREFIXES << EOF + "0.NA/${HANDLE_SERVER_HOME_PREFIX}" + "0.NA/0.NA" + "0.NA/0.0" +EOF + +AUTO_HOMED_PREFIXES="$(echo "${AUTO_HOMED_PREFIXES}" | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/\$/\\$/g')" + + diff --git a/handle_server/public.defaults.sh b/handle_server/public.defaults.sh new file mode 100644 index 0000000000000000000000000000000000000000..c9cbad0f36f20016cc39402ac96e8cd4aa12bc01 --- /dev/null +++ b/handle_server/public.defaults.sh @@ -0,0 +1,11 @@ +# default values for a public handle system + +HTTP_HEADERS="" +ENABLE_MONITOR_DAEMON="" +ALLOW_NA_ADMINS="" +TEMPLATE_NS_OVERRIDE="" +SERVER_ADMINS="300:0.NA/${HANDLE_SERVER_HOME_PREFIX}" +REPLICATION_ADMINS="${SERVER_ADMINS}" +ALLOW_RECURSION="" + +AUTO_HOMED_PREFIXES="\"0.NA/${HANDLE_SERVER_HOME_PREFIX}\"" diff --git a/handle_server/run_handle_server.sh b/handle_server/run_handle_server.sh index 0b5852f9f32b66a8ad1e9d7c0f7e4059af11ffd6..53f41ce8f78930fa7b421978d8d5fb4262eadd56 100755 --- a/handle_server/run_handle_server.sh +++ b/handle_server/run_handle_server.sh @@ -1,72 +1,53 @@ #!/bin/sh +# This script configures the handle server and starts it +# Much depends on the USE_PUBLIC_HANDLE_SYSTEM variable. +# If USE_PUBLIC_HANDLE_SYSTEM="TRUE" then everything is configured to be used with the public handle +# system. +# Otherwise, a handle server is being startet which acts as a root server of a private handle system. + SRV_DIR=/hs/srv_1 # ### Copy configuration and empty database ### if [ ! -e "${SRV_DIR}/config.dct" ] ; then cp -r /hs/templates/* "${SRV_DIR}" + + if [ "$USE_PUBLIC_HANDLE_SYSTEM" = "TRUE" ] ; then + # ### Generate keys + PRIVKEY="${SRV_DIR}/admpriv" PUBKEY="${SRV_DIR}/admpub" ./generate_keys.sh + PRIVKEY="${SRV_DIR}/privkey" PUBKEY="${SRV_DIR}/pubkey" ./generate_keys.sh + + # ### empty database + rm -r "${SRV_DIR}/bdbje" + fi fi + # ### Update configuration ### # update config.dct -ALLOW_NA_ADMINS='"allow_na_admins" = "no"' -TEMPLATE_NS_OVERRIDE='"template_ns_override" = "yes"' -SERVER_ADMINS="300:${HANDLE_SERVER_HOME_PREFIX}/ADMIN" -ENABLE_MONITOR_DAEMON='"enable_monitor_daemon" = "yes"' -ALLOW_RECURSION='"allow_recursion" = "yes"' -HTTP_HEADERS='"Access-Control-Allow-Origin" = "*"' - -AUTO_HOMED_PREFIXES="$(cat <<-_EOF - "0.NA/${HANDLE_SERVER_HOME_PREFIX}" - "0.NA/0.NA" - "0.NA/0.0" - _EOF -)" - +echo "HERE ##################" if [ "$USE_PUBLIC_HANDLE_SYSTEM" = "TRUE" ] ; then - HTTP_HEADERS="" - ENABLE_MONITOR_DAEMON="" - ALLOW_NA_ADMINS="" - TEMPLATE_NS_OVERRIDE="" - SERVER_ADMINS="300:0.NA/${HANDLE_SERVER_HOME_PREFIX}" - AUTO_HOMED_PREFIXES="\"0.NA/${HANDLE_SERVER_HOME_PREFIX}\"" + . public.defaults.sh +else + . private.defaults.sh fi -REPLICATION_ADMINS="${SERVER_ADMINS}" - -sed "s/__HANDLE_SERVER_BIND_ADDRESS__/${HANDLE_SERVER_BIND_ADDRESS}/g" /hs/templates/config.dct \ - | sed "s/__HANDLE_SERVER_ENABLE_MONITOR_DAEMON__/${ENABLE_MONITOR_DAEMON}/g" \ - | sed "s/__HANDLE_SERVER_ALLOW_RECURSION__/${ALLOW_RECURSION}/g" \ - | sed "s/__HANDLE_SERVER_HTTP_PORT__/${HANDLE_SERVER_HTTP_PORT}/g" \ - | sed "s/__HANDLE_SERVER_TCP_PORT__/${HANDLE_SERVER_TCP_PORT}/g" \ - | sed "s/__HANDLE_SERVER_UDP_PORT__/${HANDLE_SERVER_UDP_PORT}/g" \ - | sed "s/__HANDLE_SERVER_ALLOW_NA_ADMINS__/${ALLOW_NA_ADMINS}/g" \ - | sed "s/__HANDLE_SERVER_TEMPLATE_NS_OVERRIDE__/${TEMPLATE_NS_OVERRIDE}/g" \ - | sed "s/__HANDLE_SERVER_SERVER_ADMINS__/${SERVER_ADMINS}/g" \ - | sed "s/__HANDLE_SERVER_REPLICATION_ADMINS__/${REPLICATION_ADMINS}/g" \ - > "$SRV_DIR/config.dct" +. update_config.sh # update siteinfo.json -RSA_KEY_N="$(cat "${SRV_DIR}/pubkey.json" | jq .n)" -RSA_KEY_E="$(cat "${SRV_DIR}/pubkey.json" | jq .e)" +. update_siteinfo.sh -sed "s/__HANDLE_SERVER_IPV4_ADDRESS__/${HANDLE_SERVER_IPV4_ADDRESS}/g" /hs/templates/siteinfo.json \ - | sed "s/__HANDLE_SERVER_DESCRIPTION__/${HANDLE_SERVER_DESCRIPTION}/g" \ - | sed "s/__HANDLE_SERVER_HTTP_PORT__/${HANDLE_SERVER_HTTP_PORT}/g" \ - | sed "s/__HANDLE_SERVER_TCP_PORT__/${HANDLE_SERVER_TCP_PORT}/g" \ - | sed "s/__HANDLE_SERVER_UDP_PORT__/${HANDLE_SERVER_UDP_PORT}/g" \ - | sed "s/\"__HANDLE_SERVER_PUBKEY_RSA_N__\"/${RSA_KEY_N}/g" \ - | sed "s/\"__HANDLE_SERVER_PUBKEY_RSA_E__\"/${RSA_KEY_E}/g" \ - > "$SRV_DIR/siteinfo.json" - -# update batch file -sed "s/HANDLE_SERVER_IPV4_ADDRESS/${HANDLE_SERVER_IPV4_ADDRESS}/g" /hs/templates/setup.batch.hdl > "/hs/setup.batch.hdl" # ### Configure private handle network ### mkdir -p /root/.handle -sed "s/HANDLE_SERVER_IPV4_ADDRESS/${HANDLE_SERVER_IPV4_ADDRESS}/g" /hs/templates/bootstrap_handles > /root/.handle/bootstrap_handles -echo '{' > /root/.handle/config.dct -echo '"auto_update_root_info" = "no"' >> /root/.handle/config.dct -echo '}' >> /root/.handle/config.dct +if [ "$USE_PUBLIC_HANDLE_SYSTEM" != "TRUE" ] ; then + cp /hs/templates/setup.batch.hdl /hs/setup.batch.hdl + + mkdir -p /root/.handle + sed "s/__HANDLE_SERVER_IPV4_ADDRESS__/${HANDLE_SERVER_IPV4_ADDRESS}/g" /hs/templates/bootstrap_handles > /root/.handle/bootstrap_handles + echo '{' > /root/.handle/config.dct + echo '"auto_update_root_info" = "no"' >> /root/.handle/config.dct + echo '}' >> /root/.handle/config.dct +fi # actually run the server bin/hdl-server "$SRV_DIR" diff --git a/handle_server/siteinfo.template.json b/handle_server/siteinfo.template.json deleted file mode 100644 index 77a609433995f2d3987f95d1532cf018c9f85eb5..0000000000000000000000000000000000000000 --- a/handle_server/siteinfo.template.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "version": 1, - "protocolVersion": "2.11", - "serialNumber": 1, - "primarySite": true, - "multiPrimary": false, - "attributes": [ - { - "name": "desc", - "value": "__HANDLE_SERVER_DESCRIPTION__" - } - ], - "servers": [ - { - "serverId": 1, - "address": "__HANDLE_SERVER_IPV4_ADDRESS__", - "publicKey": { - "format": "key", - "value": { - "kty": "RSA", - "n": "__HANDLE_SERVER_PUBKEY_RSA_N__", - "e": "__HANDLE_SERVER_PUBKEY_RSA_E__" - } - }, - "interfaces": [ - { - "query": true, - "admin": true, - "protocol": "TCP", - "port": __HANDLE_SERVER_TCP_PORT__ - }, - { - "query": true, - "admin": false, - "protocol": "UDP", - "port": __HANDLE_SERVER_UDP_PORT__ - }, - { - "query": true, - "admin": true, - "protocol": "HTTP", - "port": __HANDLE_SERVER_HTTP_PORT__ - } - ] - } - ] -} diff --git a/handle_server/templates/bootstrap_handles b/handle_server/templates/bootstrap_handles index 914cc05f8da2a9000e8bda6ef0cfc04f6eeaf481..52795c3b66d576df271cbbfdc7081f1db55b44e4 100644 --- a/handle_server/templates/bootstrap_handles +++ b/handle_server/templates/bootstrap_handles @@ -57,7 +57,7 @@ "servers": [ { "serverId": 1, - "address": "HANDLE_SERVER_IPV4_ADDRESS", + "address": "__HANDLE_SERVER_IPV4_ADDRESS__", "publicKey": { "format": "key", "value": { diff --git a/handle_server/templates/pubkey.json b/handle_server/templates/pubkey.json new file mode 100644 index 0000000000000000000000000000000000000000..ef83f6772e28777a9a2ec872c6ae7108cf3c87ed --- /dev/null +++ b/handle_server/templates/pubkey.json @@ -0,0 +1,5 @@ +{ + "kty": "RSA", + "n": "wqkCd9QfFxYwMhQM72k-nQ5yL0lbxz9OTOTgR2eFj6dz5YZzoDg3t4MauMVUt5pkByWScle-7mdVJHuEp1GErqyzW3dPagTgmzc1R1i2gQF5fUiJFx90hkAzh88PW4qFs_YBwOsChGanGzsqn6cbKV3VQn5K2QZHF7rxeKdstF72lFN7ewkk-Kw5i0I3akpGYu9YJ_Is8k7rDQ5P_KKfrn_N_0_seQO-IT9vW_u0IvK75_6VwNjU5wU6SDF9dgivSk-qv7R_rpl8eAow0zUkllsFqJxEEn63koK5gSsKitfN7Jt_71b_Nwmjpv2gEydh42bEOSHx0dFeALwY1rl74w", + "e": "AQAB" +} \ No newline at end of file diff --git a/handle_server/update_config.sh b/handle_server/update_config.sh new file mode 100644 index 0000000000000000000000000000000000000000..849c9e0427791fff77f1ec309fbc567e05c1797e --- /dev/null +++ b/handle_server/update_config.sh @@ -0,0 +1,17 @@ +_SOURCE="${SOURCE:-"/hs/templates/config.dct"}" +_TARGET="${TARGET:-"${SRV_DIR}/config.dct"}" + +sed "s/__HANDLE_SERVER_BIND_ADDRESS__/${HANDLE_SERVER_BIND_ADDRESS}/g" "$_SOURCE" \ + | sed "s/__HANDLE_SERVER_ENABLE_MONITOR_DAEMON__/${ENABLE_MONITOR_DAEMON}/g" \ + | sed "s/__HANDLE_SERVER_ALLOW_RECURSION__/${ALLOW_RECURSION}/g" \ + | sed "s/__HANDLE_SERVER_HTTP_PORT__/${HANDLE_SERVER_HTTP_PORT}/g" \ + | sed "s/__HANDLE_SERVER_TCP_PORT__/${HANDLE_SERVER_TCP_PORT}/g" \ + | sed "s/__HANDLE_SERVER_UDP_PORT__/${HANDLE_SERVER_UDP_PORT}/g" \ + | sed "s/__HANDLE_SERVER_ALLOW_NA_ADMINS__/${ALLOW_NA_ADMINS}/g" \ + | sed "s/__HANDLE_SERVER_TEMPLATE_NS_OVERRIDE__/${TEMPLATE_NS_OVERRIDE}/g" \ + | sed "s/__HANDLE_SERVER_LOG_SAVE_INTERVAL__/${HANDLE_SERVER_LOG_SAVE_INTERVAL}/g" \ + | sed "s/__HANDLE_SERVER_HTTP_HEADERS__/${HTTP_HEADERS}/g" \ + | sed "s|__HANDLE_SERVER_SERVER_ADMINS__|${SERVER_ADMINS}|g" \ + | sed "s|__HANDLE_SERVER_REPLICATION_ADMINS__|${REPLICATION_ADMINS}|g" \ + | sed "s|__HANDLE_SERVER_AUTO_HOMED_PREFIXES__|${AUTO_HOMED_PREFIXES}|g" \ + > "$_TARGET" diff --git a/handle_server/update_siteinfo.sh b/handle_server/update_siteinfo.sh new file mode 100644 index 0000000000000000000000000000000000000000..44dc017debc5ca5bc17bda5f1f5a7e9739d40722 --- /dev/null +++ b/handle_server/update_siteinfo.sh @@ -0,0 +1,13 @@ +_SOURCE="${SOURCE:-"/hs/templates/siteinfo.json"}" +_TARGET="${TARGET:-"${SRV_DIR}/siteinfo.json"}" +RSA_KEY_N="$(cat "${SRV_DIR}/pubkey.json" | jq .n)" +RSA_KEY_E="$(cat "${SRV_DIR}/pubkey.json" | jq .e)" + +sed "s/__HANDLE_SERVER_IPV4_ADDRESS__/${HANDLE_SERVER_IPV4_ADDRESS}/g" "$_SOURCE" \ + | sed "s/__HANDLE_SERVER_DESCRIPTION__/${HANDLE_SERVER_DESCRIPTION}/g" \ + | sed "s/__HANDLE_SERVER_HTTP_PORT__/${HANDLE_SERVER_HTTP_PORT}/g" \ + | sed "s/__HANDLE_SERVER_TCP_PORT__/${HANDLE_SERVER_TCP_PORT}/g" \ + | sed "s/__HANDLE_SERVER_UDP_PORT__/${HANDLE_SERVER_UDP_PORT}/g" \ + | sed "s/\"__HANDLE_SERVER_PUBKEY_RSA_N__\"/${RSA_KEY_N}/g" \ + | sed "s/\"__HANDLE_SERVER_PUBKEY_RSA_E__\"/${RSA_KEY_E}/g" \ + > "$_TARGET"