{"id":23673999,"url":"https://github.com/wlanboy/simpleservice","last_synced_at":"2026-04-16T05:33:48.116Z","repository":{"id":77581557,"uuid":"116515093","full_name":"wlanboy/SimpleService","owner":"wlanboy","description":"Simple Spring Rest Service playing Blockchain","archived":false,"fork":false,"pushed_at":"2026-03-01T15:05:02.000Z","size":218,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-01T18:26:10.800Z","etag":null,"topics":["blockchain","docker","h2","mirror","spring-boot","spring-cloud-config","spring-data-jpa","spring-rest"],"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/wlanboy.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-01-06T20:57:53.000Z","updated_at":"2026-03-01T15:05:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"5597949d-09d0-4c3c-9b94-483e19810f0d","html_url":"https://github.com/wlanboy/SimpleService","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/wlanboy/SimpleService","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wlanboy%2FSimpleService","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wlanboy%2FSimpleService/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wlanboy%2FSimpleService/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wlanboy%2FSimpleService/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/wlanboy","download_url":"https://codeload.github.com/wlanboy/SimpleService/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/wlanboy%2FSimpleService/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31872654,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"online","status_checked_at":"2026-04-16T02:00:06.042Z","response_time":69,"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":["blockchain","docker","h2","mirror","spring-boot","spring-cloud-config","spring-data-jpa","spring-rest"],"created_at":"2024-12-29T12:58:34.390Z","updated_at":"2026-04-16T05:33:48.110Z","avatar_url":"https://github.com/wlanboy.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SimpleService\n\nSimple Spring Rest Service using Cloud Config, Spring Data, H2, Hateos to show how simple Blockchains are.\n\n## Description\n\nSimpleService ist ein Spring Boot REST-Dienst, der ein einfaches **Blockchain-basiertes Audit-Log** implementiert. Jeder neue Eintrag wird kryptografisch mit seinem Vorgänger verknüpft: Der BCrypt-Hash eines Eintrags enthält `target`, `status`, `counter` und den Hash des vorherigen Eintrags (`previousHash`). Beim Start wird automatisch ein **Genesis-Block** erzeugt, der die Kette verankert.\n\nDadurch lässt sich jede nachträgliche Manipulation eines Eintrags erkennen – der Dienst bietet einen dedizierten `/verify`-Endpunkt zur Integritätsprüfung.\n\n### REST API\n\n| Methode | Pfad                   | Beschreibung                               |\n|---------|------------------------|--------------------------------------------|\n| `POST`  | `/audit`               | Neuen Audit-Eintrag anlegen                |\n| `GET`   | `/audit`               | Alle Einträge (paginiert)                  |\n| `GET`   | `/audit/{id}`          | Eintrag nach ID abrufen                    |\n| `GET`   | `/audit/{id}/verify`   | Integrität eines Eintrags prüfen           |\n| `GET`   | `/audit/search?target=`| Einträge nach `target` durchsuchen         |\n| `GET`   | `/audit/datetime`      | Aktuelle Serverzeit abrufen                |\n\n## Architecture\n\n```text\n  HTTP Client\n      |\n      v\n+---------------------+\n|   AuditController   |  @RestController  /audit/**\n|                     |  Validierung, HTTP-Routing\n+---------------------+\n      |\n      v\n+---------------------+\n|    AuditService     |  @Service\n|                     |  - saveAuditLog()   BCrypt-Hash berechnen\n|                     |  - findById()       Einträge lesen\n|                     |  - findAll()        paginiert\n|                     |  - findByTarget()   suchen\n|                     |  - verifyEntry()    Kette validieren\n+---------------------+\n      |         |\n      v         v\n+----------+ +-------------+\n|AuditMapper| |AuditRepository|  Spring Data JPA\n|toEntity() | |findTopByOrder |\n|toModel()  | |findAllByTarget|\n+----------+ +-------------+\n                  |\n                  v\n          +---------------+\n          |  H2 Database  |  Tabelle: audit_log\n          +---------------+\n\nBlockchain-Kette der Audit-Einträge:\n\n  [Genesis Block]──────►[Entry 1]──────────►[Entry 2]──────────►[Entry N]\n  target=GENESIS         target=...           target=...           target=...\n  hash=\"GENESIS\"         previousHash=        previousHash=        previousHash=\n  previousHash=\"NONE\"    \"GENESIS\"            BCrypt(Entry 1)      BCrypt(Entry N-1)\n                         hash=BCrypt(...)      hash=BCrypt(...)     hash=BCrypt(...)\n```\n\n## Dependencies\n\nAt least: Java 21 and Maven 3.9.9\n\n## Build\n\n```bash\nmvn package\n```\n\n## Run \n\n### Windows\n\n```bash\njava -jar target\\simpleservice-0.1.1-SNAPSHOT.jar\n```\n\n### Linux (service enabled)\n\n```bash\n./target/simpleservice-0.1.1-SNAPSHOT.jar start\n```\n\n## Docker build\n\n```bash\ndocker build -t simpleservice:latest .\ndocker build -f Dockerfile25Jlink -t simpleservice:jlink .\n\ndocker images --format \"table {{.Repository}}\\t{{.Tag}}\\t{{.Size}}\" | grep \"simpleservice\"\nsimpleservice            jlink     298MB\nsimpleservice            latest    512MB\n```\n\n## Docker run service\n\n```bash\ndocker run --rm --name simpleservice -p 8201:8080 -v /tmp:/tmp -v ${pwd}/data:/data simpleservice:latest\ndocker run --rm --name simpleservice -p 8201:8080 -v /tmp:/tmp -v ${pwd}/data:/data simpleservice:jlink\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwlanboy%2Fsimpleservice","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwlanboy%2Fsimpleservice","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwlanboy%2Fsimpleservice/lists"}