{"id":21553592,"url":"https://github.com/v1ncnet/wicket-playground","last_synced_at":"2026-05-04T09:31:12.406Z","repository":{"id":162199859,"uuid":"628401481","full_name":"V1ncNet/wicket-playground","owner":"V1ncNet","description":"Collection of Apache Wicket proof of concepts","archived":false,"fork":false,"pushed_at":"2025-08-21T00:00:45.000Z","size":526,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-21T00:13:18.086Z","etag":null,"topics":["apache-wicket","bootstrap5","docker-compose","keycloak","proof-of-concept","spring-boot","spring-security"],"latest_commit_sha":null,"homepage":"","language":"Java","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/V1ncNet.png","metadata":{"files":{"readme":"README.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}},"created_at":"2023-04-15T20:43:59.000Z","updated_at":"2025-08-21T00:00:48.000Z","dependencies_parsed_at":"2024-10-23T03:17:12.069Z","dependency_job_id":"a8e3ac5e-febb-40d6-a20e-b00244d8b477","html_url":"https://github.com/V1ncNet/wicket-playground","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/V1ncNet/wicket-playground","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/V1ncNet%2Fwicket-playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/V1ncNet%2Fwicket-playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/V1ncNet%2Fwicket-playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/V1ncNet%2Fwicket-playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/V1ncNet","download_url":"https://codeload.github.com/V1ncNet/wicket-playground/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/V1ncNet%2Fwicket-playground/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273595029,"owners_count":25134256,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["apache-wicket","bootstrap5","docker-compose","keycloak","proof-of-concept","spring-boot","spring-security"],"created_at":"2024-11-24T07:11:20.645Z","updated_at":"2026-05-04T09:31:12.380Z","avatar_url":"https://github.com/V1ncNet.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wicket Playground\n\nThis project houses some PoC for integrations of frameworks, protocols and 3rd-party service outside the Apache Wicket\necosystem.\n\nThe application provides the following features:\n\n* Spring Boot application bootstrapper\n* Pluggable Wicket modules\n* React dashboard island within a Wicket page\n* 3rd-party PDF preview service embedded in an iframe\n* Bootstrap 5\n* Wicket Webjars\n* Static resource compressors\n* Sass-compiled static resources\n* Render JavaScript resources to footer\n* Wicket test suites\n* OAuth2 secured Wicket page\n* Profile-driven environments\n* Keycloak smoke test\n* Profile-driven test executions\n* Social Login for HackMD's CodiMD with Keycloak\n* Embed CodiMD notes in a Wicket page\n* JWT role claim mapping for Spring Security and Wicket\n* Wicket Bootstrap 5 Modal component\n* Native OIDC front-channel logout\n* Wicket Bootstrap form components with server-side validation and feedback messages\n* Keycloak Docker Compose service healthcheck\n* Clean dependency management\n\nTo enable authentication start the Sprint Boot application with the\n[_Spring profile_](https://docs.spring.io/spring-framework/reference/core/beans/environment.html#beans-definition-profiles-enable)\n`wicket,keycloak` active. To do so, override the `application.yml` or use the runtime property\n`-Dspring.profiles.active=wicket,keycloak`. Also use the corresponding Docker Compose file in addition to the default\none. Start the entire stack using `docker compose -f compose.yaml -f compose.keycloak.yaml up -d`.\n\n\n## Keycloak\n\nKeycloak is an authorization provider that implements the OAuth2 and OpenID Connect protocols. It manages software\nclients, users, their roles and claims for the project.\n\n### Users\n\nKeycloak is preconfigured with a variety of users that are more or less useful. The username-password-combination\n`adult:B4nk` might be the only one you ever need for development and manual testing.\n\n| Username             | Password            | Description            | Realm  | URL                                         |\n|----------------------|---------------------|------------------------|--------|---------------------------------------------|\n| \u003cmark\u003e`adult`\u003c/mark\u003e | \u003cmark\u003e`B4nk`\u003c/mark\u003e | Realm superuser        | local  | http://localhost:8180/admin/local/console/  |\n| `landlord`[^1]       | `Prop3r7y`[^1]      | Keycloak administrator | master | http://localhost:8180/admin/master/console/ |\n\n[^1]: Corresponds to the values of `KEYCLOAK_ADMIN` and `KEYCLOAK_ADMIN_PASSWORD`, set for Composes' _keycloak_.\n\n### Configuration Export\n\nThis section explains how to export updated configurations so that they can be managed by Git. The development\nconfiguration for Keycloak is part of this project to distribute changes through Git.\n\nFirst, make sure your development stack is up and running. Perform your necessary changes in the Keycloak web UI. Next,\nperform the following command. This will start a new Keycloak instance inside the running container.\n\n```shell\ndocker compose -f compose.yaml -f compose.keycloak.yaml exec keycloak sh -c \\\n  \"cp -rp /opt/keycloak/data/h2 /tmp ; \\\n  /opt/keycloak/bin/kc.sh export --dir /opt/keycloak/data/import --realm local --users realm_file \\\n    --db dev-file \\\n    --db-url 'jdbc:h2:file:/tmp/h2/keycloakdb;NON_KEYWORDS=VALUE'\"\n```\n\n\n## React island\n\nMaven is configured to compile the React sources into the Classpath when using targets like compile or package. Any\nsubsequent changes to the React code need a re-package so the new stuff gets picked up by Wicket. You may also just run\nthe vite dev server.\n\n\n## CodiMD Pads\n\n[CodiMD](https://github.com/hackmdio/codimd) is an open-source, collaborative and self-hosted service for managing notes\nin Markdown syntax.\n\n### Without Authentication\n\nStart the application and navigate to \u003chttp://localhost:8080/note\u003e to see an embedded CodiMD pad within a Wicket page.\n\n### With Authentication\n\nUnfortunately, the integration into other services and a Docker environment is finicky and has a few caveats and\npotential deal-breaker.\n\n#### 1. Hostname\n\nLike any other OAuth2 client, CodiMD needs to know where to find the OAuth2 authorization server, but neither CodiMD nor\nKeycloak separate their configuration endpoints that is easily compatible with a Docker setup. So both services must\ncommunicate via the _default gateway_ using the `host.docker.internal` hostname. You may have to add the host to you\n`localhost` IP address `127.0.0.1` in `/etc/hosts`.\n\nIf anyone has a way to resolve the workaround, feel free to contribute, write an issue or DM me. I'm so desperate for a\nclean and convenient solution. Btw, running the Docker Compose services in network mode `host` is not an option, because\nit defeats the purpose of Docker IMO and doesn't work on macOS anyway.\n\n#### 2. SSO\n\nThe Wicket page directly reference a note ID. As long as you are not logged in CodiMD will throw an _Internal Server\nError_ and logs that the URL is not valid. Because of the [first issue](#1-hostname), SSO cannot work unless\n`host.docker.internal` is used everywhere. To work around the issue, navigate to \u003chttp://localhost:8280\u003e and login a\nsecond time. Get back to \u003chttp://localhost:8080/note\u003e afterward and reload if you need to.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv1ncnet%2Fwicket-playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fv1ncnet%2Fwicket-playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fv1ncnet%2Fwicket-playground/lists"}