{"id":19346925,"url":"https://github.com/godmode2k/open_badges_cert","last_synced_at":"2025-06-10T13:05:31.382Z","repository":{"id":249004038,"uuid":"823099657","full_name":"godmode2k/open_badges_cert","owner":"godmode2k","description":"Open Badges Certification","archived":false,"fork":false,"pushed_at":"2024-11-04T14:02:13.000Z","size":300,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-24T09:44:16.214Z","etag":null,"topics":["1edtech","ca-certificates","decentralized-identity","did","ed25519","ed25519-signature-2020","eddsa-rdfc-2022","eddsa-rdfc-2022-cryptosuite","localhost","localhost-ssl","mkcert","open-badges","universal-resolver"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/godmode2k.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"custom":["https://github.com/godmode2k"]}},"created_at":"2024-07-02T12:25:03.000Z","updated_at":"2024-11-04T14:02:17.000Z","dependencies_parsed_at":"2025-01-06T14:27:11.158Z","dependency_job_id":"0febb45e-c01f-4965-bc7a-af716fa07f60","html_url":"https://github.com/godmode2k/open_badges_cert","commit_stats":null,"previous_names":["godmode2k/open_badges_cert"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godmode2k%2Fopen_badges_cert","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godmode2k%2Fopen_badges_cert/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godmode2k%2Fopen_badges_cert/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godmode2k%2Fopen_badges_cert/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/godmode2k","download_url":"https://codeload.github.com/godmode2k/open_badges_cert/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/godmode2k%2Fopen_badges_cert/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259081015,"owners_count":22802400,"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","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":["1edtech","ca-certificates","decentralized-identity","did","ed25519","ed25519-signature-2020","eddsa-rdfc-2022","eddsa-rdfc-2022-cryptosuite","localhost","localhost-ssl","mkcert","open-badges","universal-resolver"],"created_at":"2024-11-10T04:13:18.060Z","updated_at":"2025-06-10T13:05:31.358Z","avatar_url":"https://github.com/godmode2k.png","language":"JavaScript","funding_links":["https://github.com/godmode2k"],"categories":[],"sub_categories":[],"readme":"# Open Badges Certification\n\n\nSummary\n-------------\n\u003e Open Badges Certification test \u003c/br\u003e\n\u003e  - Localhost HTTPS (Development SSL/TLS), Validator \u003c/br\u003e\n\u003e \u003c/br\u003e\n\u003e WORK IN-PROGRESS\n\n\nEnvironment\n-------------\n\u003e build all and tested on GNU/Linux\n\n    GNU/Linux: Ubuntu 20.04_x64 LTS\n    Docker, Docker-Compose\n\n\nDetails\n-------------\n```sh\n$ git clone https://github.com/godmode2k/open_badges_cert.git\n$ cd open_badges_cert\n\n\n\n---------------------------------------------\nDockerfile for Open Badges Test\n\nSEE: \u003cDockerfile_open_badges_test\u003e file\n---------------------------------------------\n$ cd open_badges_cert/dockerfile/\n\n$ sudo docker build -f Dockerfile_open_badges_test -t open_badges_test:1.0 . \u0026\u0026 \\\n        sudo docker image prune \u0026\u0026 sudo docker builder prune\n// 8080:80: http (default)\n// 443:443: https (default)\n// 8082:81: tmp\n$ sudo docker run --rm -it -p 8080:80 -p 443:443 -p 8082:81 --name test_open_badges \\\n        open_badges_test:1.0\n\n# copy *.pem files and localhost SSL(TLS)\n$ sudo docker cp (container-id-open_badges_test):/root/example.com+4.pem /etc/ssl/\n$ sudo docker cp (container-id-open_badges_test):/root/example.com+4-key.pem /etc/ssl/\n$ sudo cp /etc/ssl/example.com+4.pem /usr/local/share/ca-certificates/example.com+4.crt\n$ sudo update-ca-certificates\n\n$ sudo echo '10.0.2.15   example.com' \u003e\u003e /etc/hosts\n$ sudo echo '10.0.2.15   www.example.com' \u003e\u003e /etc/hosts\n\n\n\n---------------------------------------------\nResolve\nhttps://github.com/decentralized-identity/universal-resolver\n\nSEE: \u003cdocker-compose.yml.lite\u003e file\n - port, service, cert for Node.js\n---------------------------------------------\n$ cd open_badges_cert/open_badges_dockerfile/libs/universal-resolver\n$ git clone https://github.com/decentralized-identity/universal-resolver.git\n$ cd universal-resolver/\n\n\n// All\n//$ sudo docker-compose -f docker-compose.yml pull\n//$ sudo docker-compose -f docker-compose.yml up\n\n\n// (USE THIS)\n// Lite: port(7980)\n$ cp ../docker-compose.yml.lite .\n$ sudo docker-compose -f docker-compose.yml.lite up -d\n\n\n\n$ sudo docker ps -a\nSEE: (container-id) uport/uni-resolver-driver-did-uport:5.0.0\n\n// hosts (Localhost)\n$ sudo docker exec -it (container-id-resolver) \\\n        sh -c \"echo 'x.x.x.x    example.com' \u003e\u003e /etc/hosts\"\n$ sudo docker exec -it (container-id-resolver) \\\n        sh -c \"echo 'x.x.x.x    www.example.com' \u003e\u003e /etc/hosts\"\n\n// Localhost SSL(TLS)\n// checks *.pem filename\n$ sudo docker cp /usr/local/share/ca-certificates/example.com+4.crt \\\n        (container-id-resolver):/usr/local/share/ca-certificates/\n(container-id-resolver)# update-ca-certificates\n\n//! DO NOT USE \u003cdocker-compose -f ... up\u003e here.\n$ sudo docker stop (container-id-resolver)\n$ sudo docker start (container-id-resolver)\n\n\n\n$ cd open_badges_cert/test/\n$ node test_did_web_json.js\n// did.json, did.keys\n$ sudo docker cp did.json (container-id-open_badges_test):/var/www/html/.well-known/\n\n\n// resolve: https://www.example.com\n$ curl -X GET http://localhost:7980/1.0/identifiers/did:web:www.example.com\n{\"@context\":\"https://w3id.org/did-resolution/v1\",\"didDocument\":{\"@context\":[\n\"https://www.w3.org/ns/did/v1\",\"https://w3id.org/security/suites/jws-2020/v1\"],\n\"id\":\"did:web:www.example.com\",\"verificationMethod\":[{\n\"id\":\"did:web:www.example.com#owner\",\"type\":\"JsonWebKey2020\",\n\"controller\":\"did:web:www.example.com\",\"publicKeyJwk\":{\"kty\":\"EC\",\"crv\":\"secp256k1\",\n\"x\":\"7gy2E1shf/a/YioZpGxwoz2OcAvWwSyHE0RRGA4Evpw=\",\n\"y\":\"Mnqe6RCNm7JOhipCFiqvrZy8STL/mmix2uRYNAu8m1w=\"}}],\n\"authentication\":[\"did:web:www.example.com#owner\"],\n\"assertionMethod\":[\"did:web:www.example.com#owner\"]},\n\"didResolutionMetadata\":{\"contentType\":\"application/did+ld+json\",\n\"pattern\":\"^(did:web:.+)$\",\n\"driverUrl\":\"http://uni-resolver-driver-did-uport:8081/1.0/identifiers/\",\n\"duration\":1100,\"did\":{\"didString\":\"did:web:www.example.com\",\n\"methodSpecificId\":\"www.example.com\",\"method\":\"web\"}},\"didDocumentMetadata\":{}}\n\n\n\n---------------------------------------------\nValidator (2.x, 3.x)\nhttps://github.com/1EdTech/digital-credentials-public-validator\n\nSEE: \u003cDockerfile_open_badges_validator\u003e file\n\nrecommend using Open Badges Validator Core\n(https://github.com/1EdTech/openbadges-validator-core)\nif you plan to validate Open Badges 2.0 and lower.\n---------------------------------------------\n$ cd open_badges_cert/open_badges_dockerfile/libs/validators\n$ Dockerfile_open_badges_validator\n\n$ sudo docker build -f Dockerfile_open_badges_validator \\\n        -t open_badges_validator:3.0 . \u0026\u0026 \\\n        sudo docker image prune \u0026\u0026 sudo docker builder prune\n// 8085:8080: http\n// 8086:8081: tmp\n$ sudo docker run --rm -it -p 8085:8080 -p 8086:8081 \\\n        --name test_open_badges_validator open_badges_validator:3.0\n\n\n// hosts (Localhost)\n$ sudo docker exec -it (container-id-validator) \\\n        sh -c \"echo 'x.x.x.x    example.com' \u003e\u003e /etc/hosts\"\n$ sudo docker exec -it (container-id-validator) \\\n        sh -c \"echo 'x.x.x.x    www.example.com' \u003e\u003e /etc/hosts\"\n\n// Localhost SSL(TLS)\n// checks *.pem filename\n$ sudo docker cp /usr/local/share/ca-certificates/example.com+4.crt \\\n        (container-id-validator):/usr/local/share/ca-certificates/\n(container-id-validator)# update-ca-certificates\n\n//! restart container doesn't required\n\n// Test Credentials file (JSON)\nhttps://github.com/1EdTech/digital-credentials-public-validator\n    /tree/main/inspector-vc/src/test/resources/ob20\n    /tree/main/inspector-vc/src/test/resources/ob30\n\n// (web-browser):\n - http://localhost:8085\n - http://localhost:8085/swagger-ui.html\n\n\n\n---------------------------------------------\nTEST\n---------------------------------------------\n$ cd ob30_test_base/apis\n\n// API Server (use prefer one)\n1. Python version\n{\n    // It does not required if you build Dockerfile.\n    // SEE: README.txt\n\n    // Dependencies\n}\n$ cd ob30_apis_python\n$ sudo sh run_ob30_apis.sh\n\n2. Golang version\n{\n    // It does not required if you build Dockerfile.\n    // SEE: README.txt\n\n    // Dependencies\n}\n$ cd ob30_apis_golang\n$ sudo sh run_ob30_apis.sh\n\n\n// Sign Server\n1. Node.js (SEE: README.txt)\n{\n    // It does not required if you build Dockerfile.\n    // SEE: README.txt\n\n    // Dependencies\n    $ cd ob30_apis_sign_nodejs/ob30_apis_sign\n    $ node install \u0026\u0026 cd .. \u0026\u0026 sh run_adds_depends.sh\n}\n$ cd ob30_apis_sign_nodejs/ob30_apis_sign\n$ sudo sh run_ob30_apis.sh\n\n\n// cURL\n$ curl -X POST https://localhost/credentials/1234\n$ curl -X POST https://www.example.com/credentials/1234\nResult: Signed Credential\n\n\n// sample-based JSON\n// Test Credentials file (JSON)\nhttps://github.com/1EdTech/digital-credentials-public-validator\n    /tree/main/inspector-vc/src/test/resources/ob20\n    /tree/main/inspector-vc/src/test/resources/ob30\n\n\n// (web-browser): Validation\nLocalhost:\n - http://localhost:8085/upload?validatorId=OB30Inspector\nURI: (Type URI or Upload JSON file)\n - https://www.example.com/credentials/1234\n - https://localhost/credentials/1234\nResult: Validation\n\n\n\n// Request, Response\n1. (web-browser) request\n    https://www.example.com/credentials/1234\n    or\n    https://localhost/credentials/1234\n2. localhost:443 (HTTPS API Server: Python or Golang version)\n - request unsigned document\n3. localhost:8082 (HTTPS Sign Server: Node.js)\n - response signed info (key-pair, proofValue)\n\n\n\n// Test credential (unsigned document)\n// Source-based:\n//  - https://github.com/1EdTech/digital-credentials-public-validator\n//        /blob/main/inspector-vc/src/test/resources/ob30/simple.json\n//\n// SEE: Test JSON\n// - test_sample_data.py or test_sample_data.go\n\n// unsigned document\n// removed: \"proof\": [{...}]\n{\n  \"@context\": [\n    \"https://www.w3.org/ns/credentials/v2\",\n    \"https://purl.imsglobal.org/spec/ob/v3p0/context-3.0.3.json\"\n  ],\n  \"id\": \"http://www.example.com/credentials/1234\",\n  \"type\": [\n    \"VerifiableCredential\",\n    \"OpenBadgeCredential\"\n  ],\n  \"issuer\": {\n    \"id\": \"https://www.example.com/issuers/111\",\n    \"type\": [\n      \"Profile\"\n    ],\n    \"name\": \"Example Corp\"\n  },\n  \"validFrom\": \"2010-01-01T00:00:00Z\",\n  \"name\": \"Teamwork Badge\",\n  \"credentialSubject\": {\n    \"id\": \"did:example:ebfeb1f712ebc6f1c276e12ec21\",\n    \"type\": [\n      \"AchievementSubject\"\n    ],\n    \"achievement\": {\n      \"id\": \"https://www.example.com/achievements/21st-century-skills/teamwork\",\n      \"type\": [\n        \"Achievement\"\n      ],\n      \"criteria\": {\n        \"narrative\": \"Team members are nominated for this badge by \\\n            their peers and recognized upon review by Example Corp management.\"\n      },\n      \"description\": \"This badge recognizes the development of the capacity to \\\n          collaborate within a group environment.\",\n      \"name\": \"Teamwork\"\n    }\n  }\n}\n\n\n-----\n\n\n$ cd open_badges_cert/test/\n\n// did.json, did.keys\n$ node test_did_web_json.js\n\n// ed25519\n$ cd test_ed25519/\n$ npm install # or SEE: test_ed25519.js\n$ node test_ed25519.js\n\n-----\n\n// ed25519: didkit\n$ python3 test_did.py\n\n// ed25519\n$ node test_Ed25519.js\n\n\n\n---------------------------------------------\nTODO:\n---------------------------------------------\n// Open Badges Specification\n// Final Release Spec Version 3.0\nhttps://www.imsglobal.org/spec/ob/v3p0\n\n// Open Badges Implementation Guide\n// Candidate Final Public Spec Version 3.0\nhttps://www.imsglobal.org/spec/ob/v3p0/impl/\n\n```\n\n\nScreenshots\n-------------\n\u003e Validation \u003c/br\u003e\n\u003cimg src=\"https://github.com/godmode2k/open_badges_cert/raw/main/screenshots/screenshot_validation_1.png\" width=\"50%\" height=\"50%\"\u003e\n\u003cbr\u003e\n\u003cimg src=\"https://github.com/godmode2k/open_badges_cert/raw/main/screenshots/screenshot_validation_2.png\" width=\"50%\" height=\"50%\"\u003e\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgodmode2k%2Fopen_badges_cert","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgodmode2k%2Fopen_badges_cert","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgodmode2k%2Fopen_badges_cert/lists"}