文件预览

provider.sh

查看 ClawSync 技能包中的文件内容。

文件内容

src/provider.sh

#!/usr/bin/env bash
# ClawSync — Provider Manager
# Routes to provider-specific scripts and manages provider config
# Usage: provider.sh {setup|list|test|info} [provider_name]

set -euo pipefail

VAULT_DIR="$HOME/.clawsync"
CONFIG="$VAULT_DIR/config.yaml"
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
PROVIDERS_DIR="$SCRIPT_DIR/../providers"

timestamp() { date -u +"%Y-%m-%dT%H:%M:%SZ"; }
log() { echo "[clawsync:provider $(timestamp)] $*"; }

cmd_list() {
  echo ""
  echo "Available Storage Providers"
  echo "==========================="
  echo ""
  echo "  cloud     ClawSync Cloud (managed, 50 MB free)"
  echo "  gdrive    Google Drive (via rclone)"
  echo "  dropbox   Dropbox (via rclone)"
  echo "  ftp       FTP/SFTP server (via rsync+ssh)"
  echo "  git       Any Git remote (GitHub, GitLab, etc.)"
  echo "  s3        S3-compatible bucket (via rclone)"
  echo "  webdav    WebDAV (Nextcloud, etc., via rclone)"
  echo "  local     Local directory (USB/NAS mount)"
  echo ""
  echo "Setup: clawsync.sh provider setup <name>"
  echo ""
}

cmd_setup() {
  local provider="${1:-}"

  if [[ -z "$provider" ]]; then
    echo "Usage: clawsync.sh provider setup <name>"
    cmd_list
    return 1
  fi

  local script="$PROVIDERS_DIR/${provider}.sh"
  if [[ ! -f "$script" ]]; then
    log "Unknown provider: $provider"
    cmd_list
    return 1
  fi

  if [[ ! -f "$CONFIG" ]]; then
    log "Vault not initialized. Run 'clawsync.sh init' first."
    return 1
  fi

  # Run provider setup
  bash "$script" setup

  # Update config.yaml with selected provider
  if [[ "$(uname -s)" == "Darwin" ]]; then
    sed -i '' "s/^provider: .*/provider: \"$provider\"/" "$CONFIG"
  else
    sed -i "s/^provider: .*/provider: \"$provider\"/" "$CONFIG"
  fi

  log "Provider set to: $provider"
}

cmd_test() {
  local provider="${1:-}"

  if [[ -z "$provider" ]]; then
    provider=$(grep '^provider:' "$CONFIG" 2>/dev/null | awk '{print $2}' | tr -d '"')
  fi

  if [[ -z "$provider" ]]; then
    log "No provider configured."
    return 1
  fi

  local script="$PROVIDERS_DIR/${provider}.sh"
  if [[ -f "$script" ]]; then
    bash "$script" test
  else
    log "Provider script not found: $provider"
    return 1
  fi
}

cmd_info() {
  local provider="${1:-}"

  if [[ -z "$provider" ]]; then
    provider=$(grep '^provider:' "$CONFIG" 2>/dev/null | awk '{print $2}' | tr -d '"')
  fi

  if [[ -z "$provider" ]]; then
    echo "No provider configured."
    return 0
  fi

  local script="$PROVIDERS_DIR/${provider}.sh"
  if [[ -f "$script" ]]; then
    bash "$script" info
  else
    echo "Provider: $provider (script not found)"
  fi
}

case "${1:-list}" in
  setup) cmd_setup "${2:-}" ;;
  list)  cmd_list ;;
  test)  cmd_test "${2:-}" ;;
  info)  cmd_info "${2:-}" ;;
  *)     echo "Usage: provider.sh {setup|list|test|info} [provider_name]"; exit 1 ;;
esac