SOA/bruno/bruno.sh
Alexis Bruneteau 254479d475 readme updated
2025-06-29 19:41:42 +02:00

766 lines
15 KiB
Bash
Executable File
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Bruno API Collection Generator for Private API
# Creates a complete Bruno collection structure for testing the private API endpoints
set -e
# Configuration
COLLECTION_NAME="private"
BASE_URL="https://api.local/api/private"
DEFAULT_EMAIL="alexis@example.com"
DEFAULT_USERNAME="alexis"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo_info() {
echo -e "${BLUE} $1${NC}"
}
echo_success() {
echo -e "${GREEN}$1${NC}"
}
echo_warning() {
echo -e "${YELLOW}⚠️ $1${NC}"
}
echo_error() {
echo -e "${RED}$1${NC}"
}
# Function to create directory structure
create_directories() {
local base_dir="$1"
echo_info "Creating directory structure..."
mkdir -p "${base_dir}"/{environments,auth,user,invitations,galleries,artworks,gallery-reviews,artwork-reviews}
echo_success "Directory structure created"
}
# Function to create a file with content
create_file() {
local filepath="$1"
local content="$2"
echo "$content" > "$filepath"
echo_success "Created: $filepath"
}
# Generate collection files
generate_files() {
local base_dir="$1"
echo_info "Generating Bruno collection files..."
# Main collection file
cat > "${base_dir}/bruno.json" << EOF
{
"version": "1",
"name": "Private API",
"type": "collection"
}
EOF
echo_success "Created: ${base_dir}/bruno.json"
# Environment file
cat > "${base_dir}/environments/local.bru" << EOF
vars {
baseUrl: ${BASE_URL}
email: ${DEFAULT_EMAIL}
username: ${DEFAULT_USERNAME}
}
EOF
echo_success "Created: ${base_dir}/environments/local.bru"
# Auth files
cat > "${base_dir}/auth/debug-headers.bru" << 'EOF'
meta {
name: Debug Headers
type: http
seq: 1
}
get {
url: {{baseUrl}}/debug-headers
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/auth/debug-headers.bru"
cat > "${base_dir}/auth/redirect.bru" << 'EOF'
meta {
name: OIDC Redirect
type: http
seq: 2
}
get {
url: {{baseUrl}}/redirect
}
params:query {
code: authorization_code_here
}
EOF
echo_success "Created: ${base_dir}/auth/redirect.bru"
# User files
cat > "${base_dir}/user/get-me.bru" << 'EOF'
meta {
name: Get My Profile
type: http
seq: 1
}
get {
url: {{baseUrl}}/me
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/user/get-me.bru"
cat > "${base_dir}/user/update-me.bru" << 'EOF'
meta {
name: Update My Profile
type: http
seq: 2
}
put {
url: {{baseUrl}}/me
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"alias": "Alexis Updated",
"first_name": "Alexis",
"last_name": "Doe",
"bio": "Art enthusiast and gallery curator",
"profile_picture_url": "https://example.com/avatar.jpg"
}
}
EOF
echo_success "Created: ${base_dir}/user/update-me.bru"
# Invitation files
cat > "${base_dir}/invitations/invite-user.bru" << 'EOF'
meta {
name: Invite User to Gallery
type: http
seq: 1
}
post {
url: {{baseUrl}}/gallery/1/invite
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"user_id": 2,
"role": "viewer"
}
}
EOF
echo_success "Created: ${base_dir}/invitations/invite-user.bru"
cat > "${base_dir}/invitations/respond-invitation.bru" << 'EOF'
meta {
name: Respond to Invitation
type: http
seq: 2
}
put {
url: {{baseUrl}}/invitations/1/respond
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"status": "accepted"
}
}
EOF
echo_success "Created: ${base_dir}/invitations/respond-invitation.bru"
cat > "${base_dir}/invitations/received-invitations.bru" << 'EOF'
meta {
name: Get Received Invitations
type: http
seq: 3
}
get {
url: {{baseUrl}}/invitations/received
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/invitations/received-invitations.bru"
# Gallery files
cat > "${base_dir}/galleries/list-galleries.bru" << 'EOF'
meta {
name: List All Galleries
type: http
seq: 1
}
get {
url: {{baseUrl}}/galleries
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/galleries/list-galleries.bru"
cat > "${base_dir}/galleries/get-gallery.bru" << 'EOF'
meta {
name: Get Gallery Details
type: http
seq: 2
}
get {
url: {{baseUrl}}/gallery/1
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/galleries/get-gallery.bru"
cat > "${base_dir}/galleries/create-gallery.bru" << 'EOF'
meta {
name: Create Gallery
type: http
seq: 3
}
post {
url: {{baseUrl}}/gallery
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"title": "Modern Art Collection",
"description": "A curated collection of contemporary artworks",
"is_public": true,
"publication_date": "2025-06-28T10:00:00Z"
}
}
EOF
echo_success "Created: ${base_dir}/galleries/create-gallery.bru"
cat > "${base_dir}/galleries/update-gallery.bru" << 'EOF'
meta {
name: Update Gallery
type: http
seq: 4
}
put {
url: {{baseUrl}}/gallery/1
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"title": "Updated Modern Art Collection",
"description": "An updated curated collection of contemporary artworks",
"is_public": false
}
}
EOF
echo_success "Created: ${base_dir}/galleries/update-gallery.bru"
cat > "${base_dir}/galleries/my-galleries.bru" << 'EOF'
meta {
name: Get My Galleries
type: http
seq: 5
}
get {
url: {{baseUrl}}/galleries/mine
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/galleries/my-galleries.bru"
cat > "${base_dir}/galleries/gallery-members.bru" << 'EOF'
meta {
name: Get Gallery Members
type: http
seq: 6
}
get {
url: {{baseUrl}}/gallery/1/members
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/galleries/gallery-members.bru"
# Artwork files
cat > "${base_dir}/artworks/gallery-artworks.bru" << 'EOF'
meta {
name: Get Gallery Artworks
type: http
seq: 1
}
get {
url: {{baseUrl}}/gallery/1/artworks
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/artworks/gallery-artworks.bru"
cat > "${base_dir}/artworks/get-artwork.bru" << 'EOF'
meta {
name: Get Artwork Details
type: http
seq: 2
}
get {
url: {{baseUrl}}/artwork/1
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/artworks/get-artwork.bru"
cat > "${base_dir}/artworks/create-artwork.bru" << 'EOF'
meta {
name: Create Artwork
type: http
seq: 3
}
post {
url: {{baseUrl}}/gallery/1/artwork
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"title": "Sunset Over Mountains",
"description": "A beautiful landscape painting capturing the golden hour",
"image_url": "https://example.com/artwork1.jpg",
"medium": "Oil on Canvas",
"dimensions": "24x36 inches",
"creation_year": 2024,
"price": 1500.00,
"is_visible": true,
"is_for_sale": true
}
}
EOF
echo_success "Created: ${base_dir}/artworks/create-artwork.bru"
cat > "${base_dir}/artworks/update-artwork.bru" << 'EOF'
meta {
name: Update Artwork
type: http
seq: 4
}
put {
url: {{baseUrl}}/artwork/1
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"title": "Updated Sunset Over Mountains",
"description": "An updated beautiful landscape painting",
"price": 1800.00,
"is_for_sale": false
}
}
EOF
echo_success "Created: ${base_dir}/artworks/update-artwork.bru"
cat > "${base_dir}/artworks/my-artworks.bru" << 'EOF'
meta {
name: Get My Artworks
type: http
seq: 5
}
get {
url: {{baseUrl}}/artworks/mine
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/artworks/my-artworks.bru"
# Gallery review files
cat > "${base_dir}/gallery-reviews/gallery-reviews.bru" << 'EOF'
meta {
name: Get Gallery Reviews
type: http
seq: 1
}
get {
url: {{baseUrl}}/gallery/1/reviews
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/gallery-reviews/gallery-reviews.bru"
cat > "${base_dir}/gallery-reviews/create-gallery-review.bru" << 'EOF'
meta {
name: Create Gallery Review
type: http
seq: 2
}
post {
url: {{baseUrl}}/gallery/1/review
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"grade": 5,
"description": "Excellent gallery with amazing artwork collection!",
"parent_gr_id": null
}
}
EOF
echo_success "Created: ${base_dir}/gallery-reviews/create-gallery-review.bru"
cat > "${base_dir}/gallery-reviews/update-gallery-review.bru" << 'EOF'
meta {
name: Update Gallery Review
type: http
seq: 3
}
put {
url: {{baseUrl}}/galleries/review/1
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"grade": 4,
"description": "Updated: Very good gallery with great artwork collection!"
}
}
EOF
echo_success "Created: ${base_dir}/gallery-reviews/update-gallery-review.bru"
cat > "${base_dir}/gallery-reviews/given-gallery-reviews.bru" << 'EOF'
meta {
name: Get Given Gallery Reviews
type: http
seq: 4
}
get {
url: {{baseUrl}}/galleries/reviews/given
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/gallery-reviews/given-gallery-reviews.bru"
cat > "${base_dir}/gallery-reviews/received-gallery-reviews.bru" << 'EOF'
meta {
name: Get Received Gallery Reviews
type: http
seq: 5
}
get {
url: {{baseUrl}}/galleries/reviews/received
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/gallery-reviews/received-gallery-reviews.bru"
# Artwork review files
cat > "${base_dir}/artwork-reviews/artwork-reviews.bru" << 'EOF'
meta {
name: Get Artwork Reviews
type: http
seq: 1
}
get {
url: {{baseUrl}}/artwork/1/reviews
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/artwork-reviews/artwork-reviews.bru"
cat > "${base_dir}/artwork-reviews/create-artwork-review.bru" << 'EOF'
meta {
name: Create Artwork Review
type: http
seq: 2
}
post {
url: {{baseUrl}}/artwork/1/review
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"grade": 5,
"description": "Absolutely stunning artwork! The colors and technique are magnificent.",
"parent_ar_id": null
}
}
EOF
echo_success "Created: ${base_dir}/artwork-reviews/create-artwork-review.bru"
cat > "${base_dir}/artwork-reviews/update-artwork-review.bru" << 'EOF'
meta {
name: Update Artwork Review
type: http
seq: 3
}
put {
url: {{baseUrl}}/artworks/review/1
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
Content-Type: application/json
}
body:json {
{
"grade": 4,
"description": "Updated: Very beautiful artwork! Great technique and composition."
}
}
EOF
echo_success "Created: ${base_dir}/artwork-reviews/update-artwork-review.bru"
cat > "${base_dir}/artwork-reviews/given-artwork-reviews.bru" << 'EOF'
meta {
name: Get Given Artwork Reviews
type: http
seq: 4
}
get {
url: {{baseUrl}}/artworks/reviews/given
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/artwork-reviews/given-artwork-reviews.bru"
cat > "${base_dir}/artwork-reviews/received-artwork-reviews.bru" << 'EOF'
meta {
name: Get Received Artwork Reviews
type: http
seq: 5
}
get {
url: {{baseUrl}}/artworks/reviews/received
}
headers {
OIDC_email: {{email}}
OIDC_user: {{username}}
}
EOF
echo_success "Created: ${base_dir}/artwork-reviews/received-artwork-reviews.bru"
}
# Main function
main() {
echo_info "🚀 Generating Bruno API Collection for Private API..."
echo_info "📁 Collection name: ${COLLECTION_NAME}"
echo_info "🌐 Base URL: ${BASE_URL}"
echo_info "👤 Default user: ${DEFAULT_USERNAME} (${DEFAULT_EMAIL})"
echo ""
# Get current directory or use provided path
local target_dir="${1:-$(pwd)}"
local base_dir="${target_dir}/${COLLECTION_NAME}"
echo_info "📍 Creating collection in: ${base_dir}"
echo ""
# Create directory structure
create_directories "$base_dir"
echo ""
# Generate all files
generate_files "$base_dir"
echo ""
echo_success "Bruno collection generated successfully!"
echo ""
echo_info "📋 Next steps:"
echo " 1. Open Bruno and import the collection"
echo " 2. Select the 'local' environment"
echo " 3. Update variables in environments/local.bru if needed"
echo " 4. Start testing with auth/debug-headers.bru"
echo ""
echo_info "🔧 To customize:"
echo " - Edit environments/local.bru to change baseUrl, email, username"
echo " - Update gallery/artwork IDs in individual requests"
echo " - Modify request bodies to match your test data"
echo ""
echo_warning "💡 Don't forget to update the OIDC headers if your user changes!"
}
# Help function
show_help() {
echo "Bruno API Collection Generator"
echo ""
echo "Usage: $0 [target_directory]"
echo ""
echo "Arguments:"
echo " target_directory Directory where to create the collection (default: current directory)"
echo ""
echo "Examples:"
echo " $0 # Create in current directory"
echo " $0 ~/bruno # Create in ~/bruno directory"
echo " $0 /path/to/bruno # Create in specific path"
echo ""
echo "Configuration (edit script to change):"
echo " Collection name: ${COLLECTION_NAME}"
echo " Base URL: ${BASE_URL}"
echo " Default email: ${DEFAULT_EMAIL}"
echo " Default username: ${DEFAULT_USERNAME}"
}
# Check for help flag
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
show_help
exit 0
fi
# Run main function
main "$@"}