insforge 1.2.10 โ 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +20 -20
- package/.dockerignore +60 -60
- package/.env.example +83 -77
- package/.github/ISSUE_TEMPLATE/bug_report.yml +36 -36
- package/.github/ISSUE_TEMPLATE/config.yml +11 -11
- package/.github/ISSUE_TEMPLATE/feature_request.yml +26 -26
- package/.github/PULL_REQUEST_TEMPLATE.md +7 -7
- package/.github/copilot-instructions.md +146 -146
- package/.github/workflows/build-image.yml +65 -65
- package/.github/workflows/ci-premerge-check.yml +23 -23
- package/.github/workflows/e2e.yml +63 -63
- package/.github/workflows/lint-and-format.yml +32 -32
- package/.prettierignore +64 -64
- package/CHANGELOG.md +44 -44
- package/CLAUDE_PLUGIN.md +104 -104
- package/CODE_OF_CONDUCT.md +128 -128
- package/CONTRIBUTING.md +125 -125
- package/Dockerfile +30 -30
- package/GITHUB_OAUTH_SETUP.md +49 -49
- package/GOOGLE_OAUTH_SETUP.md +148 -148
- package/LICENSE +201 -201
- package/README.md +182 -182
- package/assets/Dark.svg +23 -23
- package/auth/package.json +28 -28
- package/auth/src/lib/broadcastService.ts +117 -115
- package/auth/src/pages/SignInPage.tsx +60 -57
- package/auth/src/pages/SignUpPage.tsx +60 -57
- package/auth/tsconfig.json +32 -32
- package/auth/tsconfig.node.json +11 -11
- package/backend/package.json +78 -75
- package/backend/src/api/routes/ai/index.routes.ts +3 -3
- package/backend/src/api/routes/auth/index.routes.ts +667 -570
- package/backend/src/api/routes/auth/oauth.routes.ts +473 -448
- package/backend/src/api/routes/database/advance.routes.ts +37 -16
- package/backend/src/api/routes/database/index.routes.ts +78 -1
- package/backend/src/api/routes/database/records.routes.ts +10 -10
- package/backend/src/api/routes/database/tables.routes.ts +0 -14
- package/backend/src/api/routes/docs/index.routes.ts +75 -76
- package/backend/src/api/routes/email/index.routes.ts +35 -0
- package/backend/src/api/routes/functions/index.routes.ts +18 -12
- package/backend/src/api/routes/metadata/index.routes.ts +12 -0
- package/backend/src/api/routes/realtime/channels.routes.ts +81 -0
- package/backend/src/api/routes/realtime/index.routes.ts +12 -0
- package/backend/src/api/routes/realtime/messages.routes.ts +48 -0
- package/backend/src/api/routes/realtime/permissions.routes.ts +19 -0
- package/backend/src/api/routes/storage/index.routes.ts +18 -12
- package/backend/src/api/routes/usage/index.routes.ts +6 -4
- package/backend/src/infra/database/database.manager.ts +14 -1
- package/backend/src/infra/database/migrations/000_create-base-tables.sql +141 -141
- package/backend/src/infra/database/migrations/001_create-helper-functions.sql +40 -40
- package/backend/src/infra/database/migrations/002_rename-auth-tables.sql +29 -29
- package/backend/src/infra/database/migrations/003_create-users-table.sql +55 -55
- package/backend/src/infra/database/migrations/004_add-reload-postgrest-func.sql +23 -23
- package/backend/src/infra/database/migrations/005_enable-project-admin-modify-users.sql +29 -29
- package/backend/src/infra/database/migrations/006_modify-ai-usage-table.sql +24 -24
- package/backend/src/infra/database/migrations/007_drop-metadata-table.sql +1 -1
- package/backend/src/infra/database/migrations/008_add-system-tables.sql +76 -76
- package/backend/src/infra/database/migrations/009_add-function-secrets.sql +23 -23
- package/backend/src/infra/database/migrations/010_modify-ai-config-modalities.sql +93 -93
- package/backend/src/infra/database/migrations/011_refactor-secrets-table.sql +15 -15
- package/backend/src/infra/database/migrations/012_add-storage-uploaded-by.sql +7 -7
- package/backend/src/infra/database/migrations/013_create-auth-schema-functions.sql +44 -44
- package/backend/src/infra/database/migrations/014_add-updated-at-trigger-user-table.sql +7 -7
- package/backend/src/infra/database/migrations/015_create-auth-config-and-email-otp-tables.sql +59 -59
- package/backend/src/infra/database/migrations/016_update-auth-config-and-email-otp.sql +24 -24
- package/backend/src/infra/database/migrations/017_create-realtime-schema.sql +233 -0
- package/backend/src/infra/realtime/realtime.manager.ts +246 -0
- package/backend/src/infra/realtime/webhook-sender.ts +82 -0
- package/backend/src/infra/security/token.manager.ts +219 -125
- package/backend/src/infra/socket/socket.manager.ts +198 -64
- package/backend/src/providers/ai/openrouter.provider.ts +12 -9
- package/backend/src/providers/email/base.provider.ts +4 -7
- package/backend/src/providers/email/cloud.provider.ts +84 -0
- package/backend/src/providers/oauth/apple.provider.ts +266 -0
- package/backend/src/providers/oauth/index.ts +1 -0
- package/backend/src/server.ts +317 -284
- package/backend/src/services/ai/ai-model.service.ts +5 -5
- package/backend/src/services/ai/chat-completion.service.ts +4 -4
- package/backend/src/services/ai/image-generation.service.ts +3 -3
- package/backend/src/services/auth/auth.service.ts +14 -0
- package/backend/src/services/database/database-table.service.ts +0 -9
- package/backend/src/services/database/database.service.ts +127 -0
- package/backend/src/services/email/email.service.ts +5 -7
- package/backend/src/services/realtime/index.ts +3 -0
- package/backend/src/services/realtime/realtime-auth.service.ts +104 -0
- package/backend/src/services/realtime/realtime-channel.service.ts +237 -0
- package/backend/src/services/realtime/realtime-message.service.ts +260 -0
- package/backend/src/types/auth.ts +11 -0
- package/backend/src/types/realtime.ts +18 -0
- package/backend/src/types/socket.ts +7 -31
- package/backend/src/utils/cookies.ts +35 -0
- package/backend/src/utils/s3-config-loader.ts +64 -0
- package/backend/src/utils/seed.ts +301 -298
- package/backend/src/utils/sql-parser.ts +90 -0
- package/backend/tests/README.md +133 -133
- package/backend/tests/cleanup-all-test-data.sh +230 -230
- package/backend/tests/cloud/test-s3-multitenant.sh +131 -131
- package/backend/tests/local/comprehensive-curl-tests.sh +155 -155
- package/backend/tests/local/test-ai-config.sh +129 -129
- package/backend/tests/local/test-ai-usage.sh +80 -80
- package/backend/tests/local/test-auth-router.sh +143 -143
- package/backend/tests/local/test-database-router.sh +222 -222
- package/backend/tests/local/test-e2e.sh +240 -240
- package/backend/tests/local/test-fk-errors.sh +96 -96
- package/backend/tests/local/test-functions.sh +123 -123
- package/backend/tests/local/test-id-field.sh +200 -200
- package/backend/tests/local/test-logs.sh +132 -132
- package/backend/tests/local/test-public-bucket.sh +264 -264
- package/backend/tests/local/test-secrets.sh +249 -249
- package/backend/tests/local/test-serverless-functions.sh.disabled +325 -325
- package/backend/tests/local/test-traditional-rest.sh +208 -208
- package/backend/tests/manual/README.md +50 -50
- package/backend/tests/manual/create-large-table-simple.sql +10 -10
- package/backend/tests/manual/seed-large-table.sql +100 -100
- package/backend/tests/manual/setup-large-table-extras.sql +33 -33
- package/backend/tests/manual/test-bulk-upsert.sh +409 -409
- package/backend/tests/manual/test-database-advance.sh +296 -296
- package/backend/tests/manual/test-postgrest-stability.sh +191 -191
- package/backend/tests/manual/test-rawsql-export-import.sh +411 -411
- package/backend/tests/manual/test-rawsql-modes.sh +244 -244
- package/backend/tests/manual/test-universal-storage.sh +263 -263
- package/backend/tests/manual/test-users.sql +17 -17
- package/backend/tests/run-all-tests.sh +139 -139
- package/backend/tests/setup.ts +0 -0
- package/backend/tests/test-config.sh +338 -338
- package/backend/tests/unit/analyze-query.test.ts +697 -0
- package/backend/tsconfig.json +22 -22
- package/claude-plugin/.claude-plugin/plugin.json +24 -24
- package/claude-plugin/README.md +133 -133
- package/claude-plugin/skills/insforge-schema-patterns/SKILL.md +270 -270
- package/docker-compose.prod.yml +204 -200
- package/docker-compose.yml +232 -228
- package/docker-init/db/db-init.sql +97 -97
- package/docker-init/db/jwt.sql +5 -5
- package/docker-init/db/postgresql.conf +16 -16
- package/docker-init/logs/vector.yml +236 -236
- package/docs/README.md +44 -44
- package/docs/agent-docs/real-time.md +269 -0
- package/docs/changelog.mdx +119 -67
- package/docs/core-concepts/ai/architecture.mdx +372 -372
- package/docs/core-concepts/ai/sdk.mdx +213 -213
- package/docs/core-concepts/authentication/architecture.mdx +278 -278
- package/docs/core-concepts/authentication/sdk.mdx +414 -414
- package/docs/core-concepts/authentication/ui-components/customization.mdx +529 -529
- package/docs/core-concepts/authentication/ui-components/nextjs.mdx +221 -221
- package/docs/core-concepts/authentication/ui-components/react-router.mdx +184 -184
- package/docs/core-concepts/authentication/ui-components/react.mdx +129 -129
- package/docs/core-concepts/database/architecture.mdx +255 -255
- package/docs/core-concepts/database/sdk.mdx +382 -382
- package/docs/core-concepts/email/architecture.mdx +101 -0
- package/docs/core-concepts/email/sdk.mdx +53 -0
- package/docs/core-concepts/functions/architecture.mdx +105 -105
- package/docs/core-concepts/functions/sdk.mdx +184 -184
- package/docs/core-concepts/realtime/architecture.mdx +446 -0
- package/docs/core-concepts/realtime/sdk.mdx +409 -0
- package/docs/core-concepts/storage/architecture.mdx +243 -243
- package/docs/core-concepts/storage/sdk.mdx +253 -253
- package/docs/deployment/README.md +94 -94
- package/docs/deployment/deploy-to-aws-ec2.md +564 -564
- package/docs/deployment/deploy-to-azure-virtual-machines.md +312 -312
- package/docs/deployment/deploy-to-google-cloud-compute-engine.md +613 -613
- package/docs/deployment/deploy-to-render.md +441 -441
- package/docs/deprecated/insforge-auth-api.md +214 -214
- package/docs/deprecated/insforge-auth-sdk.md +99 -99
- package/docs/deprecated/insforge-db-api.md +358 -358
- package/docs/deprecated/insforge-db-sdk.md +139 -139
- package/docs/deprecated/insforge-debug-sdk.md +156 -156
- package/docs/deprecated/insforge-debug.md +64 -64
- package/docs/deprecated/insforge-instructions.md +123 -123
- package/docs/deprecated/insforge-project.md +117 -117
- package/docs/deprecated/insforge-storage-api.md +278 -278
- package/docs/deprecated/insforge-storage-sdk.md +158 -158
- package/docs/docs.json +232 -210
- package/docs/examples/framework-guides/nextjs.mdx +131 -131
- package/docs/examples/framework-guides/nuxt.mdx +165 -165
- package/docs/examples/framework-guides/react.mdx +165 -165
- package/docs/examples/framework-guides/svelte.mdx +153 -153
- package/docs/examples/framework-guides/vue.mdx +159 -159
- package/docs/examples/overview.mdx +67 -67
- package/docs/favicon.svg +19 -19
- package/docs/images/changelog/dec-2025/ai-integration.png +0 -0
- package/docs/images/changelog/dec-2025/ai-models.webp +0 -0
- package/docs/images/changelog/dec-2025/alipay-payment.webp +0 -0
- package/docs/images/changelog/dec-2025/apple-login.jpg +0 -0
- package/docs/images/changelog/dec-2025/mcp-installer.png +0 -0
- package/docs/images/changelog/dec-2025/realtime-module.jpg +0 -0
- package/docs/images/icons/ai.svg +4 -4
- package/docs/images/logos/nextjs.svg +4 -4
- package/docs/images/logos/nuxt.svg +4 -4
- package/docs/images/logos/react.svg +5 -5
- package/docs/images/logos/svelte.svg +4 -4
- package/docs/images/logos/vue.svg +5 -5
- package/docs/insforge-instructions-sdk.md +89 -88
- package/docs/introduction.mdx +45 -45
- package/docs/logo/dark.svg +22 -22
- package/docs/logo/light.svg +20 -20
- package/docs/partnership.mdx +651 -646
- package/docs/quickstart.mdx +82 -82
- package/docs/showcase.mdx +52 -52
- package/docs/snippets/sdk-installation.mdx +21 -21
- package/docs/snippets/service-icons.mdx +27 -27
- package/examples/oauth/frontend-oauth-example.html +250 -250
- package/examples/response-examples.md +443 -443
- package/frontend/components.json +17 -17
- package/frontend/package.json +69 -69
- package/frontend/src/assets/icons/checkbox_checked.svg +6 -6
- package/frontend/src/assets/icons/checkbox_undetermined.svg +6 -6
- package/frontend/src/assets/icons/checked.svg +3 -3
- package/frontend/src/assets/icons/connected.svg +3 -3
- package/frontend/src/assets/icons/error.svg +3 -3
- package/frontend/src/assets/icons/loader.svg +9 -9
- package/frontend/src/assets/icons/pencil.svg +4 -4
- package/frontend/src/assets/icons/refresh.svg +4 -4
- package/frontend/src/assets/icons/step_active.svg +3 -3
- package/frontend/src/assets/icons/step_inactive.svg +11 -11
- package/frontend/src/assets/icons/warning.svg +3 -3
- package/frontend/src/assets/logos/apple.svg +3 -3
- package/frontend/src/assets/logos/claude_code.svg +3 -3
- package/frontend/src/assets/logos/cline.svg +6 -6
- package/frontend/src/assets/logos/cursor.svg +20 -20
- package/frontend/src/assets/logos/discord.svg +8 -8
- package/frontend/src/assets/logos/facebook.svg +3 -3
- package/frontend/src/assets/logos/gemini.svg +19 -19
- package/frontend/src/assets/logos/github.svg +5 -5
- package/frontend/src/assets/logos/google.svg +13 -13
- package/frontend/src/assets/logos/grok.svg +10 -10
- package/frontend/src/assets/logos/insforge_dark.svg +15 -15
- package/frontend/src/assets/logos/insforge_light.svg +15 -15
- package/frontend/src/assets/logos/instagram.svg +1 -1
- package/frontend/src/assets/logos/linkedin.svg +3 -3
- package/frontend/src/assets/logos/openai.svg +10 -10
- package/frontend/src/assets/logos/roo_code.svg +9 -9
- package/frontend/src/assets/logos/spotify.svg +16 -16
- package/frontend/src/assets/logos/tiktok.svg +5 -5
- package/frontend/src/assets/logos/trae.svg +3 -3
- package/frontend/src/assets/logos/windsurf.svg +10 -10
- package/frontend/src/assets/logos/x.svg +3 -3
- package/frontend/src/components/layout/AppHeader.tsx +9 -10
- package/frontend/src/features/auth/components/OAuthConfigDialog.tsx +1 -0
- package/frontend/src/features/auth/components/UsersDataGrid.tsx +6 -0
- package/frontend/src/features/auth/helpers.tsx +8 -0
- package/frontend/src/features/auth/{page โ pages}/UsersPage.tsx +0 -28
- package/frontend/src/features/database/components/SQLModal.tsx +75 -0
- package/frontend/src/features/database/components/TableForm.tsx +0 -4
- package/frontend/src/features/database/hooks/useDatabase.ts +66 -0
- package/frontend/src/features/database/hooks/useTables.ts +32 -28
- package/frontend/src/features/database/index.ts +1 -0
- package/frontend/src/features/database/{page โ pages}/FunctionsPage.tsx +29 -37
- package/frontend/src/features/database/{page โ pages}/IndexesPage.tsx +35 -47
- package/frontend/src/features/database/{page โ pages}/PoliciesPage.tsx +43 -54
- package/frontend/src/features/database/{page โ pages}/TablesPage.tsx +0 -42
- package/frontend/src/features/database/{page โ pages}/TriggersPage.tsx +35 -47
- package/frontend/src/features/database/services/advance.service.ts +0 -26
- package/frontend/src/features/database/services/database.service.ts +55 -0
- package/frontend/src/features/database/services/table.service.ts +0 -6
- package/frontend/src/features/functions/{page โ pages}/FunctionsPage.tsx +21 -44
- package/frontend/src/features/functions/{page โ pages}/SecretsPage.tsx +11 -9
- package/frontend/src/features/logs/hooks/useMcpUsage.ts +13 -66
- package/frontend/src/features/realtime/components/ChannelRow.tsx +83 -0
- package/frontend/src/features/realtime/components/EditChannelModal.tsx +246 -0
- package/frontend/src/features/realtime/components/MessageRow.tsx +85 -0
- package/frontend/src/features/realtime/components/RealtimeEmptyState.tsx +30 -0
- package/frontend/src/features/realtime/hooks/useRealtime.ts +218 -0
- package/frontend/src/features/realtime/index.ts +11 -0
- package/frontend/src/features/realtime/pages/RealtimeChannelsPage.tsx +172 -0
- package/frontend/src/features/realtime/pages/RealtimeMessagesPage.tsx +211 -0
- package/frontend/src/features/realtime/pages/RealtimePermissionsPage.tsx +191 -0
- package/frontend/src/features/realtime/services/realtime.service.ts +107 -0
- package/frontend/src/features/storage/{page โ pages}/StoragePage.tsx +1 -29
- package/frontend/src/features/visualizer/components/SchemaVisualizer.tsx +3 -3
- package/frontend/src/features/visualizer/{page โ pages}/VisualizerPage.tsx +1 -35
- package/frontend/src/lib/contexts/SocketContext.tsx +119 -75
- package/frontend/src/lib/routing/AppRoutes.tsx +35 -20
- package/frontend/src/lib/utils/cloudMessaging.ts +1 -1
- package/frontend/src/lib/utils/menuItems.ts +24 -0
- package/frontend/src/lib/utils/utils.ts +14 -1
- package/frontend/tsconfig.json +25 -25
- package/frontend/tsconfig.node.json +9 -9
- package/functions/deno.json +24 -24
- package/functions/server.ts +315 -315
- package/i18n/README.ar.md +130 -130
- package/i18n/README.de.md +130 -130
- package/i18n/README.es.md +154 -154
- package/i18n/README.fr.md +134 -134
- package/i18n/README.hi.md +129 -129
- package/i18n/README.ja.md +174 -174
- package/i18n/README.ko.md +136 -136
- package/i18n/README.pt-BR.md +131 -131
- package/i18n/README.ru.md +129 -129
- package/i18n/README.zh-CN.md +133 -133
- package/openapi/ai.yaml +715 -715
- package/openapi/auth.yaml +1244 -1244
- package/openapi/email.yaml +158 -0
- package/openapi/functions.yaml +475 -475
- package/openapi/health.yaml +29 -29
- package/openapi/logs.yaml +223 -223
- package/openapi/metadata.yaml +177 -177
- package/openapi/realtime.yaml +699 -0
- package/openapi/records.yaml +381 -381
- package/openapi/secrets.yaml +370 -370
- package/openapi/storage.yaml +875 -875
- package/openapi/tables.yaml +463 -463
- package/package.json +97 -97
- package/shared-schemas/package.json +31 -31
- package/shared-schemas/src/ai.schema.ts +63 -59
- package/shared-schemas/src/auth-api.schema.ts +352 -339
- package/shared-schemas/src/auth.schema.ts +1 -1
- package/shared-schemas/src/database-api.schema.ts +32 -1
- package/shared-schemas/src/database.schema.ts +39 -0
- package/shared-schemas/src/docs.schema.ts +26 -0
- package/shared-schemas/src/email-api.schema.ts +30 -0
- package/shared-schemas/src/index.ts +4 -0
- package/shared-schemas/src/metadata.schema.ts +9 -0
- package/shared-schemas/src/realtime-api.schema.ts +111 -0
- package/shared-schemas/src/realtime.schema.ts +143 -0
- package/shared-schemas/tsconfig.json +21 -21
- package/tsconfig.json +7 -7
- package/zeabur/README.md +13 -13
- package/zeabur/template.yml +1032 -1032
- package/.cursor/rules/cursor-rules.mdc +0 -94
- package/frontend/src/features/database/hooks/useFullMetadata.ts +0 -18
- package/test-gemini.sh +0 -35
- package/test-usage-admin.sh +0 -57
- package/test-usage.sh +0 -50
- /package/frontend/src/features/ai/{page โ pages}/AIPage.tsx +0 -0
- /package/frontend/src/features/auth/{page โ pages}/AuthMethodsPage.tsx +0 -0
- /package/frontend/src/features/auth/{page โ pages}/ConfigurationPage.tsx +0 -0
- /package/frontend/src/features/dashboard/{page โ pages}/DashboardPage.tsx +0 -0
- /package/frontend/src/features/database/{page โ pages}/SQLEditorPage.tsx +0 -0
- /package/frontend/src/features/database/{page โ pages}/TemplatesPage.tsx +0 -0
- /package/frontend/src/features/login/{page โ pages}/CloudLoginPage.tsx +0 -0
- /package/frontend/src/features/login/{page โ pages}/LoginPage.tsx +0 -0
- /package/frontend/src/features/logs/{page โ pages}/AuditsPage.tsx +0 -0
- /package/frontend/src/features/logs/{page โ pages}/LogsPage.tsx +0 -0
- /package/frontend/src/features/logs/{page โ pages}/MCPLogsPage.tsx +0 -0
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Test script for ID field functionality
|
|
4
|
-
|
|
5
|
-
# Get the directory where this script is located
|
|
6
|
-
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
7
|
-
|
|
8
|
-
# Source the test configuration
|
|
9
|
-
source "$SCRIPT_DIR/../test-config.sh"
|
|
10
|
-
|
|
11
|
-
echo "=== Testing User Creation with ID Field ==="
|
|
12
|
-
|
|
13
|
-
# Use configuration from test-config.sh
|
|
14
|
-
API_URL="$TEST_API_BASE"
|
|
15
|
-
|
|
16
|
-
# Test users for cleanup tracking
|
|
17
|
-
USER1_EMAIL="${TEST_USER_EMAIL_PREFIX}id_test1_$(date +%s)@example.com"
|
|
18
|
-
USER2_EMAIL="${TEST_USER_EMAIL_PREFIX}id_test2_$(date +%s)@example.com"
|
|
19
|
-
USER3_EMAIL="${TEST_USER_EMAIL_PREFIX}id_test3_$(date +%s)@example.com"
|
|
20
|
-
|
|
21
|
-
# Register users for cleanup
|
|
22
|
-
register_test_user "$USER1_EMAIL"
|
|
23
|
-
register_test_user "$USER2_EMAIL"
|
|
24
|
-
register_test_user "$USER3_EMAIL"
|
|
25
|
-
|
|
26
|
-
# Test 1: Create user without ID (should auto-generate)
|
|
27
|
-
print_info "1. Creating user without ID (auto-generate):"
|
|
28
|
-
response1=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/auth/users" \
|
|
29
|
-
-H "Content-Type: application/json" \
|
|
30
|
-
-d "{
|
|
31
|
-
\"email\": \"$USER1_EMAIL\",
|
|
32
|
-
\"password\": \"password123\",
|
|
33
|
-
\"name\": \"Test User 1\"
|
|
34
|
-
}")
|
|
35
|
-
|
|
36
|
-
body1=$(echo "$response1" | sed '$d')
|
|
37
|
-
status1=$(echo "$response1" | tail -n 1)
|
|
38
|
-
|
|
39
|
-
if [ "$status1" -ge 200 ] && [ "$status1" -lt 300 ]; then
|
|
40
|
-
print_success "User created without ID ($status1)"
|
|
41
|
-
echo "Response: $body1" | head -c 200
|
|
42
|
-
echo ""
|
|
43
|
-
else
|
|
44
|
-
print_fail "User creation without ID failed ($status1)"
|
|
45
|
-
echo "Error: $body1"
|
|
46
|
-
fi
|
|
47
|
-
|
|
48
|
-
# Test 2: Create user with custom ID
|
|
49
|
-
print_info "2. Creating user with custom ID:"
|
|
50
|
-
# Generate a valid UUID v4
|
|
51
|
-
CUSTOM_ID="$(uuidgen | tr '[:upper:]' '[:lower:]')"
|
|
52
|
-
response2=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/auth/users" \
|
|
53
|
-
-H "Content-Type: application/json" \
|
|
54
|
-
-d "{
|
|
55
|
-
\"id\": \"$CUSTOM_ID\",
|
|
56
|
-
\"email\": \"$USER2_EMAIL\",
|
|
57
|
-
\"password\": \"password123\",
|
|
58
|
-
\"name\": \"Test User 2\"
|
|
59
|
-
}")
|
|
60
|
-
|
|
61
|
-
body2=$(echo "$response2" | sed '$d')
|
|
62
|
-
status2=$(echo "$response2" | tail -n 1)
|
|
63
|
-
|
|
64
|
-
if [ "$status2" -ge 200 ] && [ "$status2" -lt 300 ]; then
|
|
65
|
-
print_success "User created with custom ID ($status2)"
|
|
66
|
-
echo "Response: $body2" | head -c 200
|
|
67
|
-
echo ""
|
|
68
|
-
else
|
|
69
|
-
print_fail "User creation with custom ID failed ($status2)"
|
|
70
|
-
echo "Error: $body2"
|
|
71
|
-
fi
|
|
72
|
-
|
|
73
|
-
# Test 3: Try to create user with duplicate ID (JWT auth doesn't support custom IDs)
|
|
74
|
-
print_info "3. Creating user with duplicate ID (JWT auth ignores custom ID):"
|
|
75
|
-
response3=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/auth/users" \
|
|
76
|
-
-H "Content-Type: application/json" \
|
|
77
|
-
-d "{
|
|
78
|
-
\"id\": \"$CUSTOM_ID\",
|
|
79
|
-
\"email\": \"$USER3_EMAIL\",
|
|
80
|
-
\"password\": \"password123\",
|
|
81
|
-
\"name\": \"Test User 3\"
|
|
82
|
-
}")
|
|
83
|
-
|
|
84
|
-
body3=$(echo "$response3" | sed '$d')
|
|
85
|
-
status3=$(echo "$response3" | tail -n 1)
|
|
86
|
-
|
|
87
|
-
# JWT auth doesn't support custom IDs, so it will always succeed with a new generated ID
|
|
88
|
-
if [ "$status3" -eq 200 ] || [ "$status3" -eq 201 ]; then
|
|
89
|
-
print_success "JWT auth created user with generated ID (expected behavior)"
|
|
90
|
-
print_info "Note: JWT auth doesn't support custom user IDs"
|
|
91
|
-
else
|
|
92
|
-
print_fail "Unexpected response ($status3)"
|
|
93
|
-
echo "Error: $body3"
|
|
94
|
-
fi
|
|
95
|
-
|
|
96
|
-
echo ""
|
|
97
|
-
echo "=== Testing Record Creation with ID Field ==="
|
|
98
|
-
|
|
99
|
-
# Get admin token for table creation
|
|
100
|
-
admin_token=$(get_admin_token)
|
|
101
|
-
if [ -z "$admin_token" ]; then
|
|
102
|
-
print_fail "Could not get admin token for table creation"
|
|
103
|
-
fi
|
|
104
|
-
|
|
105
|
-
# Create a test table
|
|
106
|
-
TEST_TABLE="test_items_$(date +%s)"
|
|
107
|
-
register_test_table "$TEST_TABLE"
|
|
108
|
-
|
|
109
|
-
print_info "4. Creating test table: $TEST_TABLE"
|
|
110
|
-
create_response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/database/tables" \
|
|
111
|
-
-H "Authorization: Bearer $admin_token" \
|
|
112
|
-
-H "Content-Type: application/json" \
|
|
113
|
-
-d "{
|
|
114
|
-
\"tableName\": \"$TEST_TABLE\",
|
|
115
|
-
\"rlsEnabled\": false,
|
|
116
|
-
\"columns\": [
|
|
117
|
-
{\"columnName\": \"title\", \"type\": \"string\", \"isNullable\": false, \"isUnique\": false},
|
|
118
|
-
{\"columnName\": \"description\", \"type\": \"string\", \"isNullable\": true, \"isUnique\": false},
|
|
119
|
-
{\"columnName\": \"status\", \"type\": \"string\", \"isNullable\": false, \"isUnique\": false}
|
|
120
|
-
]
|
|
121
|
-
}")
|
|
122
|
-
|
|
123
|
-
create_body=$(echo "$create_response" | sed '$d')
|
|
124
|
-
create_status=$(echo "$create_response" | tail -n 1)
|
|
125
|
-
|
|
126
|
-
if [ "$create_status" -ge 200 ] && [ "$create_status" -lt 300 ]; then
|
|
127
|
-
print_success "Test table created successfully ($create_status)"
|
|
128
|
-
# Wait for the table to be created and synced
|
|
129
|
-
sleep 1
|
|
130
|
-
else
|
|
131
|
-
print_fail "Test table creation failed ($create_status)"
|
|
132
|
-
echo "Error: $create_body"
|
|
133
|
-
fi
|
|
134
|
-
|
|
135
|
-
# Test 5: Create record without ID (should auto-generate)
|
|
136
|
-
print_info "5. Creating record without ID (auto-generate):"
|
|
137
|
-
record1_response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/database/records/$TEST_TABLE" \
|
|
138
|
-
-H "Authorization: Bearer $admin_token" \
|
|
139
|
-
-H "Content-Type: application/json" \
|
|
140
|
-
-d '[{
|
|
141
|
-
"title": "Test Item 1",
|
|
142
|
-
"description": "This is a test item",
|
|
143
|
-
"status": "active"
|
|
144
|
-
}]')
|
|
145
|
-
|
|
146
|
-
record1_body=$(echo "$record1_response" | sed '$d')
|
|
147
|
-
record1_status=$(echo "$record1_response" | tail -n 1)
|
|
148
|
-
|
|
149
|
-
if [ "$record1_status" -ge 200 ] && [ "$record1_status" -lt 300 ]; then
|
|
150
|
-
print_success "Record created without ID ($record1_status)"
|
|
151
|
-
echo "Response: $record1_body" | head -c 200
|
|
152
|
-
echo ""
|
|
153
|
-
else
|
|
154
|
-
print_fail "Record creation without ID failed ($record1_status)"
|
|
155
|
-
echo "Error: $record1_body"
|
|
156
|
-
fi
|
|
157
|
-
|
|
158
|
-
# Test 6: Create record with custom ID
|
|
159
|
-
print_info "6. Creating record with custom ID:"
|
|
160
|
-
# Generate a valid UUID v4
|
|
161
|
-
CUSTOM_RECORD_ID="$(uuidgen | tr '[:upper:]' '[:lower:]')"
|
|
162
|
-
record2_response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/database/records/$TEST_TABLE" \
|
|
163
|
-
-H "Authorization: Bearer $admin_token" \
|
|
164
|
-
-H "Content-Type: application/json" \
|
|
165
|
-
-d "[{
|
|
166
|
-
\"id\": \"$CUSTOM_RECORD_ID\",
|
|
167
|
-
\"title\": \"Test Item 2\",
|
|
168
|
-
\"description\": \"This has a custom ID\",
|
|
169
|
-
\"status\": \"active\"
|
|
170
|
-
}]")
|
|
171
|
-
|
|
172
|
-
record2_body=$(echo "$record2_response" | sed '$d')
|
|
173
|
-
record2_status=$(echo "$record2_response" | tail -n 1)
|
|
174
|
-
|
|
175
|
-
if [ "$record2_status" -ge 200 ] && [ "$record2_status" -lt 300 ]; then
|
|
176
|
-
print_success "Record created with custom ID ($record2_status)"
|
|
177
|
-
echo "Response: $record2_body" | head -c 200
|
|
178
|
-
echo ""
|
|
179
|
-
else
|
|
180
|
-
print_fail "Record creation with custom ID failed ($record2_status)"
|
|
181
|
-
echo "Error: $record2_body"
|
|
182
|
-
fi
|
|
183
|
-
|
|
184
|
-
# Test 7: Query records to verify IDs
|
|
185
|
-
print_info "7. Querying all records to verify IDs:"
|
|
186
|
-
query_response=$(curl -s -w "\n%{http_code}" -X GET "$API_URL/database/records/$TEST_TABLE" \
|
|
187
|
-
-H "Authorization: Bearer $admin_token")
|
|
188
|
-
|
|
189
|
-
query_body=$(echo "$query_response" | sed '$d')
|
|
190
|
-
query_status=$(echo "$query_response" | tail -n 1)
|
|
191
|
-
|
|
192
|
-
if [ "$query_status" -ge 200 ] && [ "$query_status" -lt 300 ]; then
|
|
193
|
-
print_success "Records queried successfully ($query_status)"
|
|
194
|
-
echo "Records: $query_body" | head -c 500
|
|
195
|
-
echo ""
|
|
196
|
-
else
|
|
197
|
-
print_fail "Record query failed ($query_status)"
|
|
198
|
-
echo "Error: $query_body"
|
|
199
|
-
fi
|
|
200
|
-
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Test script for ID field functionality
|
|
4
|
+
|
|
5
|
+
# Get the directory where this script is located
|
|
6
|
+
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
7
|
+
|
|
8
|
+
# Source the test configuration
|
|
9
|
+
source "$SCRIPT_DIR/../test-config.sh"
|
|
10
|
+
|
|
11
|
+
echo "=== Testing User Creation with ID Field ==="
|
|
12
|
+
|
|
13
|
+
# Use configuration from test-config.sh
|
|
14
|
+
API_URL="$TEST_API_BASE"
|
|
15
|
+
|
|
16
|
+
# Test users for cleanup tracking
|
|
17
|
+
USER1_EMAIL="${TEST_USER_EMAIL_PREFIX}id_test1_$(date +%s)@example.com"
|
|
18
|
+
USER2_EMAIL="${TEST_USER_EMAIL_PREFIX}id_test2_$(date +%s)@example.com"
|
|
19
|
+
USER3_EMAIL="${TEST_USER_EMAIL_PREFIX}id_test3_$(date +%s)@example.com"
|
|
20
|
+
|
|
21
|
+
# Register users for cleanup
|
|
22
|
+
register_test_user "$USER1_EMAIL"
|
|
23
|
+
register_test_user "$USER2_EMAIL"
|
|
24
|
+
register_test_user "$USER3_EMAIL"
|
|
25
|
+
|
|
26
|
+
# Test 1: Create user without ID (should auto-generate)
|
|
27
|
+
print_info "1. Creating user without ID (auto-generate):"
|
|
28
|
+
response1=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/auth/users" \
|
|
29
|
+
-H "Content-Type: application/json" \
|
|
30
|
+
-d "{
|
|
31
|
+
\"email\": \"$USER1_EMAIL\",
|
|
32
|
+
\"password\": \"password123\",
|
|
33
|
+
\"name\": \"Test User 1\"
|
|
34
|
+
}")
|
|
35
|
+
|
|
36
|
+
body1=$(echo "$response1" | sed '$d')
|
|
37
|
+
status1=$(echo "$response1" | tail -n 1)
|
|
38
|
+
|
|
39
|
+
if [ "$status1" -ge 200 ] && [ "$status1" -lt 300 ]; then
|
|
40
|
+
print_success "User created without ID ($status1)"
|
|
41
|
+
echo "Response: $body1" | head -c 200
|
|
42
|
+
echo ""
|
|
43
|
+
else
|
|
44
|
+
print_fail "User creation without ID failed ($status1)"
|
|
45
|
+
echo "Error: $body1"
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
# Test 2: Create user with custom ID
|
|
49
|
+
print_info "2. Creating user with custom ID:"
|
|
50
|
+
# Generate a valid UUID v4
|
|
51
|
+
CUSTOM_ID="$(uuidgen | tr '[:upper:]' '[:lower:]')"
|
|
52
|
+
response2=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/auth/users" \
|
|
53
|
+
-H "Content-Type: application/json" \
|
|
54
|
+
-d "{
|
|
55
|
+
\"id\": \"$CUSTOM_ID\",
|
|
56
|
+
\"email\": \"$USER2_EMAIL\",
|
|
57
|
+
\"password\": \"password123\",
|
|
58
|
+
\"name\": \"Test User 2\"
|
|
59
|
+
}")
|
|
60
|
+
|
|
61
|
+
body2=$(echo "$response2" | sed '$d')
|
|
62
|
+
status2=$(echo "$response2" | tail -n 1)
|
|
63
|
+
|
|
64
|
+
if [ "$status2" -ge 200 ] && [ "$status2" -lt 300 ]; then
|
|
65
|
+
print_success "User created with custom ID ($status2)"
|
|
66
|
+
echo "Response: $body2" | head -c 200
|
|
67
|
+
echo ""
|
|
68
|
+
else
|
|
69
|
+
print_fail "User creation with custom ID failed ($status2)"
|
|
70
|
+
echo "Error: $body2"
|
|
71
|
+
fi
|
|
72
|
+
|
|
73
|
+
# Test 3: Try to create user with duplicate ID (JWT auth doesn't support custom IDs)
|
|
74
|
+
print_info "3. Creating user with duplicate ID (JWT auth ignores custom ID):"
|
|
75
|
+
response3=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/auth/users" \
|
|
76
|
+
-H "Content-Type: application/json" \
|
|
77
|
+
-d "{
|
|
78
|
+
\"id\": \"$CUSTOM_ID\",
|
|
79
|
+
\"email\": \"$USER3_EMAIL\",
|
|
80
|
+
\"password\": \"password123\",
|
|
81
|
+
\"name\": \"Test User 3\"
|
|
82
|
+
}")
|
|
83
|
+
|
|
84
|
+
body3=$(echo "$response3" | sed '$d')
|
|
85
|
+
status3=$(echo "$response3" | tail -n 1)
|
|
86
|
+
|
|
87
|
+
# JWT auth doesn't support custom IDs, so it will always succeed with a new generated ID
|
|
88
|
+
if [ "$status3" -eq 200 ] || [ "$status3" -eq 201 ]; then
|
|
89
|
+
print_success "JWT auth created user with generated ID (expected behavior)"
|
|
90
|
+
print_info "Note: JWT auth doesn't support custom user IDs"
|
|
91
|
+
else
|
|
92
|
+
print_fail "Unexpected response ($status3)"
|
|
93
|
+
echo "Error: $body3"
|
|
94
|
+
fi
|
|
95
|
+
|
|
96
|
+
echo ""
|
|
97
|
+
echo "=== Testing Record Creation with ID Field ==="
|
|
98
|
+
|
|
99
|
+
# Get admin token for table creation
|
|
100
|
+
admin_token=$(get_admin_token)
|
|
101
|
+
if [ -z "$admin_token" ]; then
|
|
102
|
+
print_fail "Could not get admin token for table creation"
|
|
103
|
+
fi
|
|
104
|
+
|
|
105
|
+
# Create a test table
|
|
106
|
+
TEST_TABLE="test_items_$(date +%s)"
|
|
107
|
+
register_test_table "$TEST_TABLE"
|
|
108
|
+
|
|
109
|
+
print_info "4. Creating test table: $TEST_TABLE"
|
|
110
|
+
create_response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/database/tables" \
|
|
111
|
+
-H "Authorization: Bearer $admin_token" \
|
|
112
|
+
-H "Content-Type: application/json" \
|
|
113
|
+
-d "{
|
|
114
|
+
\"tableName\": \"$TEST_TABLE\",
|
|
115
|
+
\"rlsEnabled\": false,
|
|
116
|
+
\"columns\": [
|
|
117
|
+
{\"columnName\": \"title\", \"type\": \"string\", \"isNullable\": false, \"isUnique\": false},
|
|
118
|
+
{\"columnName\": \"description\", \"type\": \"string\", \"isNullable\": true, \"isUnique\": false},
|
|
119
|
+
{\"columnName\": \"status\", \"type\": \"string\", \"isNullable\": false, \"isUnique\": false}
|
|
120
|
+
]
|
|
121
|
+
}")
|
|
122
|
+
|
|
123
|
+
create_body=$(echo "$create_response" | sed '$d')
|
|
124
|
+
create_status=$(echo "$create_response" | tail -n 1)
|
|
125
|
+
|
|
126
|
+
if [ "$create_status" -ge 200 ] && [ "$create_status" -lt 300 ]; then
|
|
127
|
+
print_success "Test table created successfully ($create_status)"
|
|
128
|
+
# Wait for the table to be created and synced
|
|
129
|
+
sleep 1
|
|
130
|
+
else
|
|
131
|
+
print_fail "Test table creation failed ($create_status)"
|
|
132
|
+
echo "Error: $create_body"
|
|
133
|
+
fi
|
|
134
|
+
|
|
135
|
+
# Test 5: Create record without ID (should auto-generate)
|
|
136
|
+
print_info "5. Creating record without ID (auto-generate):"
|
|
137
|
+
record1_response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/database/records/$TEST_TABLE" \
|
|
138
|
+
-H "Authorization: Bearer $admin_token" \
|
|
139
|
+
-H "Content-Type: application/json" \
|
|
140
|
+
-d '[{
|
|
141
|
+
"title": "Test Item 1",
|
|
142
|
+
"description": "This is a test item",
|
|
143
|
+
"status": "active"
|
|
144
|
+
}]')
|
|
145
|
+
|
|
146
|
+
record1_body=$(echo "$record1_response" | sed '$d')
|
|
147
|
+
record1_status=$(echo "$record1_response" | tail -n 1)
|
|
148
|
+
|
|
149
|
+
if [ "$record1_status" -ge 200 ] && [ "$record1_status" -lt 300 ]; then
|
|
150
|
+
print_success "Record created without ID ($record1_status)"
|
|
151
|
+
echo "Response: $record1_body" | head -c 200
|
|
152
|
+
echo ""
|
|
153
|
+
else
|
|
154
|
+
print_fail "Record creation without ID failed ($record1_status)"
|
|
155
|
+
echo "Error: $record1_body"
|
|
156
|
+
fi
|
|
157
|
+
|
|
158
|
+
# Test 6: Create record with custom ID
|
|
159
|
+
print_info "6. Creating record with custom ID:"
|
|
160
|
+
# Generate a valid UUID v4
|
|
161
|
+
CUSTOM_RECORD_ID="$(uuidgen | tr '[:upper:]' '[:lower:]')"
|
|
162
|
+
record2_response=$(curl -s -w "\n%{http_code}" -X POST "$API_URL/database/records/$TEST_TABLE" \
|
|
163
|
+
-H "Authorization: Bearer $admin_token" \
|
|
164
|
+
-H "Content-Type: application/json" \
|
|
165
|
+
-d "[{
|
|
166
|
+
\"id\": \"$CUSTOM_RECORD_ID\",
|
|
167
|
+
\"title\": \"Test Item 2\",
|
|
168
|
+
\"description\": \"This has a custom ID\",
|
|
169
|
+
\"status\": \"active\"
|
|
170
|
+
}]")
|
|
171
|
+
|
|
172
|
+
record2_body=$(echo "$record2_response" | sed '$d')
|
|
173
|
+
record2_status=$(echo "$record2_response" | tail -n 1)
|
|
174
|
+
|
|
175
|
+
if [ "$record2_status" -ge 200 ] && [ "$record2_status" -lt 300 ]; then
|
|
176
|
+
print_success "Record created with custom ID ($record2_status)"
|
|
177
|
+
echo "Response: $record2_body" | head -c 200
|
|
178
|
+
echo ""
|
|
179
|
+
else
|
|
180
|
+
print_fail "Record creation with custom ID failed ($record2_status)"
|
|
181
|
+
echo "Error: $record2_body"
|
|
182
|
+
fi
|
|
183
|
+
|
|
184
|
+
# Test 7: Query records to verify IDs
|
|
185
|
+
print_info "7. Querying all records to verify IDs:"
|
|
186
|
+
query_response=$(curl -s -w "\n%{http_code}" -X GET "$API_URL/database/records/$TEST_TABLE" \
|
|
187
|
+
-H "Authorization: Bearer $admin_token")
|
|
188
|
+
|
|
189
|
+
query_body=$(echo "$query_response" | sed '$d')
|
|
190
|
+
query_status=$(echo "$query_response" | tail -n 1)
|
|
191
|
+
|
|
192
|
+
if [ "$query_status" -ge 200 ] && [ "$query_status" -lt 300 ]; then
|
|
193
|
+
print_success "Records queried successfully ($query_status)"
|
|
194
|
+
echo "Records: $query_body" | head -c 500
|
|
195
|
+
echo ""
|
|
196
|
+
else
|
|
197
|
+
print_fail "Record query failed ($query_status)"
|
|
198
|
+
echo "Error: $query_body"
|
|
199
|
+
fi
|
|
200
|
+
|
|
201
201
|
print_success "๐ ID field tests completed!"
|
|
@@ -1,132 +1,132 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
|
|
3
|
-
# Logs and Audit test script
|
|
4
|
-
|
|
5
|
-
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
6
|
-
source "$SCRIPT_DIR/../test-config.sh"
|
|
7
|
-
|
|
8
|
-
echo "๐งช Testing logs and audit..."
|
|
9
|
-
|
|
10
|
-
API_BASE="$TEST_API_BASE"
|
|
11
|
-
ADMIN_TOKEN=""
|
|
12
|
-
|
|
13
|
-
# Get admin token
|
|
14
|
-
echo "๐ Getting admin token..."
|
|
15
|
-
ADMIN_TOKEN=$(get_admin_token)
|
|
16
|
-
|
|
17
|
-
if [ -z "$ADMIN_TOKEN" ]; then
|
|
18
|
-
print_fail "Failed to get admin token"
|
|
19
|
-
exit 1
|
|
20
|
-
fi
|
|
21
|
-
print_success "Got admin token"
|
|
22
|
-
echo ""
|
|
23
|
-
|
|
24
|
-
# 1. Get audit logs
|
|
25
|
-
echo "๐ Getting audit logs..."
|
|
26
|
-
audit_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/audits?limit=10&offset=0" \
|
|
27
|
-
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
28
|
-
|
|
29
|
-
status=$(echo "$audit_response" | tail -n 1)
|
|
30
|
-
body=$(echo "$audit_response" | sed '$d')
|
|
31
|
-
|
|
32
|
-
if [ "$status" -eq 200 ] || [ "$status" -eq 206 ]; then
|
|
33
|
-
print_success "Retrieved audit logs"
|
|
34
|
-
echo "Response: $body" | head -c 200
|
|
35
|
-
echo ""
|
|
36
|
-
else
|
|
37
|
-
print_fail "Failed to get audit logs (status: $status)"
|
|
38
|
-
echo "Response: $body"
|
|
39
|
-
track_test_failure
|
|
40
|
-
fi
|
|
41
|
-
echo ""
|
|
42
|
-
|
|
43
|
-
# 2. Get audit logs filtered by module
|
|
44
|
-
echo "๐ Getting audit logs filtered by module..."
|
|
45
|
-
module_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/audits?module=AUTH&limit=10" \
|
|
46
|
-
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
47
|
-
|
|
48
|
-
status=$(echo "$module_response" | tail -n 1)
|
|
49
|
-
body=$(echo "$module_response" | sed '$d')
|
|
50
|
-
|
|
51
|
-
if [ "$status" -eq 200 ] || [ "$status" -eq 206 ]; then
|
|
52
|
-
print_success "Retrieved filtered audit logs"
|
|
53
|
-
else
|
|
54
|
-
print_fail "Failed to get filtered audit logs (status: $status)"
|
|
55
|
-
echo "Response: $body"
|
|
56
|
-
track_test_failure
|
|
57
|
-
fi
|
|
58
|
-
echo ""
|
|
59
|
-
|
|
60
|
-
# 3. Get audit statistics
|
|
61
|
-
echo "๐ Getting audit statistics..."
|
|
62
|
-
stats_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/audits/stats?days=7" \
|
|
63
|
-
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
64
|
-
|
|
65
|
-
status=$(echo "$stats_response" | tail -n 1)
|
|
66
|
-
body=$(echo "$stats_response" | sed '$d')
|
|
67
|
-
|
|
68
|
-
if [ "$status" -eq 200 ] || [ "$status" -eq 500 ]; then
|
|
69
|
-
if [ "$status" -eq 500 ]; then
|
|
70
|
-
print_info "Audit statistics endpoint returned 500 (may not be fully implemented)"
|
|
71
|
-
else
|
|
72
|
-
print_success "Retrieved audit statistics"
|
|
73
|
-
fi
|
|
74
|
-
else
|
|
75
|
-
print_fail "Failed to get audit statistics (status: $status)"
|
|
76
|
-
echo "Response: $body"
|
|
77
|
-
track_test_failure
|
|
78
|
-
fi
|
|
79
|
-
echo ""
|
|
80
|
-
|
|
81
|
-
# 4. Get log sources
|
|
82
|
-
echo "๐ Getting log sources..."
|
|
83
|
-
sources_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/sources" \
|
|
84
|
-
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
85
|
-
|
|
86
|
-
status=$(echo "$sources_response" | tail -n 1)
|
|
87
|
-
body=$(echo "$sources_response" | sed '$d')
|
|
88
|
-
|
|
89
|
-
if [ "$status" -eq 200 ]; then
|
|
90
|
-
print_success "Retrieved log sources"
|
|
91
|
-
else
|
|
92
|
-
print_fail "Failed to get log sources (status: $status)"
|
|
93
|
-
echo "Response: $body"
|
|
94
|
-
track_test_failure
|
|
95
|
-
fi
|
|
96
|
-
echo ""
|
|
97
|
-
|
|
98
|
-
# 5. Search logs
|
|
99
|
-
echo "๐ Searching logs..."
|
|
100
|
-
search_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/search?q=test&limit=10" \
|
|
101
|
-
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
102
|
-
|
|
103
|
-
status=$(echo "$search_response" | tail -n 1)
|
|
104
|
-
body=$(echo "$search_response" | sed '$d')
|
|
105
|
-
|
|
106
|
-
if [ "$status" -eq 200 ] || [ "$status" -eq 206 ]; then
|
|
107
|
-
print_success "Searched logs successfully"
|
|
108
|
-
else
|
|
109
|
-
print_fail "Failed to search logs (status: $status)"
|
|
110
|
-
echo "Response: $body"
|
|
111
|
-
track_test_failure
|
|
112
|
-
fi
|
|
113
|
-
echo ""
|
|
114
|
-
|
|
115
|
-
# 6. Get log stats
|
|
116
|
-
echo "๐ Getting log statistics..."
|
|
117
|
-
log_stats_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/stats" \
|
|
118
|
-
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
119
|
-
|
|
120
|
-
status=$(echo "$log_stats_response" | tail -n 1)
|
|
121
|
-
body=$(echo "$log_stats_response" | sed '$d')
|
|
122
|
-
|
|
123
|
-
if [ "$status" -eq 200 ]; then
|
|
124
|
-
print_success "Retrieved log statistics"
|
|
125
|
-
else
|
|
126
|
-
print_fail "Failed to get log statistics (status: $status)"
|
|
127
|
-
echo "Response: $body"
|
|
128
|
-
track_test_failure
|
|
129
|
-
fi
|
|
130
|
-
echo ""
|
|
131
|
-
|
|
132
|
-
print_success "๐ Logs and audit test completed!"
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Logs and Audit test script
|
|
4
|
+
|
|
5
|
+
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
|
6
|
+
source "$SCRIPT_DIR/../test-config.sh"
|
|
7
|
+
|
|
8
|
+
echo "๐งช Testing logs and audit..."
|
|
9
|
+
|
|
10
|
+
API_BASE="$TEST_API_BASE"
|
|
11
|
+
ADMIN_TOKEN=""
|
|
12
|
+
|
|
13
|
+
# Get admin token
|
|
14
|
+
echo "๐ Getting admin token..."
|
|
15
|
+
ADMIN_TOKEN=$(get_admin_token)
|
|
16
|
+
|
|
17
|
+
if [ -z "$ADMIN_TOKEN" ]; then
|
|
18
|
+
print_fail "Failed to get admin token"
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|
|
21
|
+
print_success "Got admin token"
|
|
22
|
+
echo ""
|
|
23
|
+
|
|
24
|
+
# 1. Get audit logs
|
|
25
|
+
echo "๐ Getting audit logs..."
|
|
26
|
+
audit_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/audits?limit=10&offset=0" \
|
|
27
|
+
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
28
|
+
|
|
29
|
+
status=$(echo "$audit_response" | tail -n 1)
|
|
30
|
+
body=$(echo "$audit_response" | sed '$d')
|
|
31
|
+
|
|
32
|
+
if [ "$status" -eq 200 ] || [ "$status" -eq 206 ]; then
|
|
33
|
+
print_success "Retrieved audit logs"
|
|
34
|
+
echo "Response: $body" | head -c 200
|
|
35
|
+
echo ""
|
|
36
|
+
else
|
|
37
|
+
print_fail "Failed to get audit logs (status: $status)"
|
|
38
|
+
echo "Response: $body"
|
|
39
|
+
track_test_failure
|
|
40
|
+
fi
|
|
41
|
+
echo ""
|
|
42
|
+
|
|
43
|
+
# 2. Get audit logs filtered by module
|
|
44
|
+
echo "๐ Getting audit logs filtered by module..."
|
|
45
|
+
module_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/audits?module=AUTH&limit=10" \
|
|
46
|
+
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
47
|
+
|
|
48
|
+
status=$(echo "$module_response" | tail -n 1)
|
|
49
|
+
body=$(echo "$module_response" | sed '$d')
|
|
50
|
+
|
|
51
|
+
if [ "$status" -eq 200 ] || [ "$status" -eq 206 ]; then
|
|
52
|
+
print_success "Retrieved filtered audit logs"
|
|
53
|
+
else
|
|
54
|
+
print_fail "Failed to get filtered audit logs (status: $status)"
|
|
55
|
+
echo "Response: $body"
|
|
56
|
+
track_test_failure
|
|
57
|
+
fi
|
|
58
|
+
echo ""
|
|
59
|
+
|
|
60
|
+
# 3. Get audit statistics
|
|
61
|
+
echo "๐ Getting audit statistics..."
|
|
62
|
+
stats_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/audits/stats?days=7" \
|
|
63
|
+
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
64
|
+
|
|
65
|
+
status=$(echo "$stats_response" | tail -n 1)
|
|
66
|
+
body=$(echo "$stats_response" | sed '$d')
|
|
67
|
+
|
|
68
|
+
if [ "$status" -eq 200 ] || [ "$status" -eq 500 ]; then
|
|
69
|
+
if [ "$status" -eq 500 ]; then
|
|
70
|
+
print_info "Audit statistics endpoint returned 500 (may not be fully implemented)"
|
|
71
|
+
else
|
|
72
|
+
print_success "Retrieved audit statistics"
|
|
73
|
+
fi
|
|
74
|
+
else
|
|
75
|
+
print_fail "Failed to get audit statistics (status: $status)"
|
|
76
|
+
echo "Response: $body"
|
|
77
|
+
track_test_failure
|
|
78
|
+
fi
|
|
79
|
+
echo ""
|
|
80
|
+
|
|
81
|
+
# 4. Get log sources
|
|
82
|
+
echo "๐ Getting log sources..."
|
|
83
|
+
sources_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/sources" \
|
|
84
|
+
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
85
|
+
|
|
86
|
+
status=$(echo "$sources_response" | tail -n 1)
|
|
87
|
+
body=$(echo "$sources_response" | sed '$d')
|
|
88
|
+
|
|
89
|
+
if [ "$status" -eq 200 ]; then
|
|
90
|
+
print_success "Retrieved log sources"
|
|
91
|
+
else
|
|
92
|
+
print_fail "Failed to get log sources (status: $status)"
|
|
93
|
+
echo "Response: $body"
|
|
94
|
+
track_test_failure
|
|
95
|
+
fi
|
|
96
|
+
echo ""
|
|
97
|
+
|
|
98
|
+
# 5. Search logs
|
|
99
|
+
echo "๐ Searching logs..."
|
|
100
|
+
search_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/search?q=test&limit=10" \
|
|
101
|
+
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
102
|
+
|
|
103
|
+
status=$(echo "$search_response" | tail -n 1)
|
|
104
|
+
body=$(echo "$search_response" | sed '$d')
|
|
105
|
+
|
|
106
|
+
if [ "$status" -eq 200 ] || [ "$status" -eq 206 ]; then
|
|
107
|
+
print_success "Searched logs successfully"
|
|
108
|
+
else
|
|
109
|
+
print_fail "Failed to search logs (status: $status)"
|
|
110
|
+
echo "Response: $body"
|
|
111
|
+
track_test_failure
|
|
112
|
+
fi
|
|
113
|
+
echo ""
|
|
114
|
+
|
|
115
|
+
# 6. Get log stats
|
|
116
|
+
echo "๐ Getting log statistics..."
|
|
117
|
+
log_stats_response=$(curl -s -w "\n%{http_code}" -X GET "$API_BASE/logs/stats" \
|
|
118
|
+
-H "Authorization: Bearer $ADMIN_TOKEN")
|
|
119
|
+
|
|
120
|
+
status=$(echo "$log_stats_response" | tail -n 1)
|
|
121
|
+
body=$(echo "$log_stats_response" | sed '$d')
|
|
122
|
+
|
|
123
|
+
if [ "$status" -eq 200 ]; then
|
|
124
|
+
print_success "Retrieved log statistics"
|
|
125
|
+
else
|
|
126
|
+
print_fail "Failed to get log statistics (status: $status)"
|
|
127
|
+
echo "Response: $body"
|
|
128
|
+
track_test_failure
|
|
129
|
+
fi
|
|
130
|
+
echo ""
|
|
131
|
+
|
|
132
|
+
print_success "๐ Logs and audit test completed!"
|