{"id":36703525,"url":"https://github.com/embabel/tripper","last_synced_at":"2026-01-12T11:40:30.050Z","repository":{"id":298256174,"uuid":"999358682","full_name":"embabel/tripper","owner":"embabel","description":"Travel planner agent","archived":false,"fork":false,"pushed_at":"2025-11-17T09:12:51.000Z","size":2655,"stargazers_count":99,"open_issues_count":11,"forks_count":34,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-17T11:18:05.936Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/embabel.png","metadata":{"files":{"readme":"README-SECURITY.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-10T06:17:19.000Z","updated_at":"2025-11-17T09:12:55.000Z","dependencies_parsed_at":"2025-06-25T09:44:23.089Z","dependency_job_id":"34f0d225-b787-4edc-a7e1-8aba1aa837ca","html_url":"https://github.com/embabel/tripper","commit_stats":null,"previous_names":["embabel/travel-planner-agent","embabel/tripper"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/embabel/tripper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embabel%2Ftripper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embabel%2Ftripper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embabel%2Ftripper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embabel%2Ftripper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/embabel","download_url":"https://codeload.github.com/embabel/tripper/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/embabel%2Ftripper/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338972,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:58:46.209Z","status":"ssl_error","status_checked_at":"2026-01-12T10:58:42.742Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-01-12T11:40:29.465Z","updated_at":"2026-01-12T11:40:30.039Z","avatar_url":"https://github.com/embabel.png","language":"Kotlin","funding_links":[],"categories":["Examples"],"sub_categories":[],"readme":"# Spring Security with Google OAuth2 Authentication\n\nThis application uses Spring Security with Google OAuth2 for authentication.\n\nSet the `embabel.security.enabled` property to `true` in your `application.properties` file to enable security features.\n\nFollow these steps to set up Google OAuth2:\n\n## Setting Up Google OAuth2\n\n1. Go to the [Google Cloud Console](https://console.cloud.google.com/)\n2. Create a new project or select an existing one\n3. Navigate to \"APIs \u0026 Services\" \u003e \"Credentials\"\n4. Click \"Create Credentials\" and select \"OAuth client ID\"\n5. Select \"Web application\" as the application type\n6. Add a name for your OAuth client\n7. Add authorized redirect URIs:\n\n- `http://localhost:8080/login/oauth2/code/google` (for local development)\n- Add your production URLs if deploying to production\n\n8. Click \"Create\"\n9. Google will provide a Client ID and Client Secret\n\n## Configuring the Application\n\n1. Open `src/main/resources/application.properties`\n2. Replace the placeholder values with your actual Google OAuth2 credentials:\n\n```properties\nspring.security.oauth2.client.registration.google.client-id=YOUR_GOOGLE_CLIENT_ID\nspring.security.oauth2.client.registration.google.client-secret=YOUR_GOOGLE_CLIENT_SECRET\n```\n\n## Security Configuration\n\nThe security configuration is defined in `SecurityConfig.kt`. The current setup:\n\n- Requires authentication for all pages except static resources and the login page\n- Uses Google OAuth2 for authentication\n- Provides a login page at `/login`\n- Redirects to the home page after successful login\n- Allows logout with redirect to the login page\n\n## User Information\n\nAfter authentication, user details from Google are available:\n\n- User profile at `/user` shows detailed information\n- User name displayed in the navigation bar\n- Access to OAuth2 user attributes in Thymeleaf templates\n\n## Custom OAuth2 User Service\n\nThe application uses a custom OAuth2 user service (`CustomOAuth2UserService.kt`) to:\n\n- Load user details from Google\n- Extract user information (email, name)\n- Assign default role (ROLE_USER)\n- Return a properly configured OAuth2User\n\n## Thymeleaf Security Integration\n\nThe application uses Thymeleaf's Spring Security integration to show/hide content based on authentication status:\n\n- Use `sec:authorize=\"isAuthenticated()\"` to show content only to authenticated users\n- Use `sec:authentication=\"name\"` to display the authenticated user's name\n\nExample:\n\n```html\n\n\u003cdiv sec:authorize=\"isAuthenticated()\"\u003e\n    Welcome, \u003cspan sec:authentication=\"name\"\u003eUser\u003c/span\u003e!\n\u003c/div\u003e\n```\n\n## For Production Deployment\n\nFor production deployments, consider:\n\n1. Enabling CSRF protection\n2. Implementing proper user persistence in a database\n3. Adding more granular authorization rules\n4. Configuring secure session management","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fembabel%2Ftripper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fembabel%2Ftripper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fembabel%2Ftripper/lists"}