From 1af0c072b98bebba250ae922e37e52ac4ff6ed86 Mon Sep 17 00:00:00 2001 From: Charles N Wyble Date: Sat, 30 Nov 2024 07:53:46 -0500 Subject: [PATCH] v0.1 --- create-and-publish-dsr.sh | 152 +++++++++++++++++++++++++++++++ dsr-datagather-gitea-activity.sh | 83 +++++++++++++++++ 2 files changed, 235 insertions(+) create mode 100644 create-and-publish-dsr.sh create mode 100644 dsr-datagather-gitea-activity.sh diff --git a/create-and-publish-dsr.sh b/create-and-publish-dsr.sh new file mode 100644 index 0000000..cbeaae4 --- /dev/null +++ b/create-and-publish-dsr.sh @@ -0,0 +1,152 @@ +#!/bin/bash + +secrets_manager() +{ + +echo "Obtaining discourse api key..." + +bw logout + +#################################### +## Step 0: Set to use tsys server +#################################### +bw config server https://pwvault.turnsys.com + +#################################### +## Step 1: login to bitwarden +#################################### + +# From: https://bitwarden.com/help/cli/#using-an-api-key + +### Set apikey environment varaible + +source D:/tsys/secrets/bitwarden/data/apikey-bitwarden-reachableceo + +### Login to vault using apikey... + +bw login --apikey $BW_CLIENTID $BW_CLIENTSECRET + +### Step 1.1: unlock / save session id + +export BW_SESSION="$(bw unlock --passwordenv TSYS_BW_PASSWORD_REACHABLECEO --raw)" + +### Step 2: retrive a value into an environment variable + +export DISCOURSE_APIKEY="$(bw get password APIKEY-discourse)" + +} + +generate_dsr() +{ + +echo "Creating PDF of DSR from markdown input via pandoc..." + +INPUT_FILE="./DSR-$(date +%m-%d-%Y).md" +OUTPUT_FILE="./DSR-$(date +%m-%d-%Y).pdf" +METADATA_FILE="daily-stakeholder-report.yml" +TEMPLATE="eisvogel" + +pandoc \ +$INPUT_FILE \ +--template $TEMPLATE \ +--metadata-file=$METADATA_FILE \ +--from markdown \ +--to=pdf \ +--output $OUTPUT_FILE +} + +post_dsr() + +{ +echo "Posting DSR..." + +#!/bin/bash + +# Replace these with your Discourse instance details +DISCOURSE_URL="https://community.turnsys.com" # e.g., https://forum.example.com +API_KEY="$DISCOURSE_APIKEY" # Your API key +API_USERNAME="reachableceo" # API username or admin account + +# The category ID to post to (update to match your forum's categories) +CATEGORY_ID=61 + +# The title for the post (generated here; customize as needed) +TITLE="Daily Stakeholder Report - $(date +'%m-%d-%Y')" + +# The content of the post +CONTENT="Please see the attached PDF for today's report." + +# The file to upload (from the second argument or auto-generated based on date) +FILE_PATH="./DSR-"$(date +%m-%d-%Y)".pdf" + +# Check if the file exists +if [ ! -f "$FILE_PATH" ]; then + echo "File not found: $FILE_PATH" + exit 1 +fi + +# Upload the file +echo "Uploading file..." +upload_response=$(curl -s -X POST "$DISCOURSE_URL/uploads.json" \ + -H "Content-Type: multipart/form-data" \ + -H "Api-Key: $API_KEY" \ + -H "Api-Username: $API_USERNAME" \ + -F "file=@$FILE_PATH;type=application/pdf" \ + -F "type=composer") + +echo "Upload Response: $upload_response" + +# Extract the short_url from the response +short_url=$(echo "$upload_response" | /mingw64/bin/jq -r '.short_url') + +# Check if the short_url was returned +if [ "$short_url" == "null" ]; then + echo "Failed to extract short_url. Response:" + echo "$upload_response" + exit 1 +fi + +echo "File uploaded successfully. Short URL: $short_url" + +# Append the file link to the post content (Markdown format) +CONTENT="$CONTENT\n\n[Download the PDF]($short_url)" + +# Create the new topic +echo "Creating new topic..." +post_response=$(curl -s -X POST "$DISCOURSE_URL/posts.json" \ + -H "Content-Type: application/json" \ + -H "Api-Key: $API_KEY" \ + -H "Api-Username: $API_USERNAME" \ + -d @- < [GITEA_URL] [TOKEN] + +# Set username, date, and default Gitea URL +USERNAME="${1:-reachableceo}" # Default to "reachableceo" if not provided +DATE="${2:-$(date +%Y-%m-%d)}" # Default to today's date if not provided +GITEA_URL="${3:-https://git.knownelement.com}" # Default Gitea URL if not provided +TOKEN="${GITEA_APIKEY}" # Use APIKEY-GItea or passed argument + +# API Endpoint for user activities +API_ENDPOINT="$GITEA_URL/api/v1/users/$USERNAME/timeline" + +# Make the API call +if [ -n "$TOKEN" ]; then + # If token is provided, use it in the Authorization header + RESPONSE=$(curl -s -H "Authorization: token $TOKEN" "$API_ENDPOINT") +else + # If no token is provided, make an unauthenticated request + RESPONSE=$(curl -s "$API_ENDPOINT") +fi + +# Check for API errors +if [[ "$RESPONSE" == "Not found" || -z "$RESPONSE" ]]; then + echo "Error: User '$USERNAME' not found, or endpoint is incorrect." + exit 1 +fi + +# Validate JSON response +if ! echo "$RESPONSE" | jq empty >/dev/null 2>&1; then + echo "Error: Invalid JSON response from Gitea API." + echo "Response: $RESPONSE" + exit 1 +fi + +# Filter the activity by date using jq +echo "$RESPONSE" | jq --arg date "$DATE" '[.[] | select(.created_at | startswith($date))]' \ No newline at end of file