{"id":26059758,"url":"https://github.com/orange-cloudfoundry/static-creds-broker","last_synced_at":"2025-04-11T06:50:36.957Z","repository":{"id":48487962,"uuid":"49631376","full_name":"orange-cloudfoundry/static-creds-broker","owner":"orange-cloudfoundry","description":"A CloudFoundry service broker to ease exposition of static credentials","archived":false,"fork":false,"pushed_at":"2021-07-23T04:21:04.000Z","size":396,"stargazers_count":7,"open_issues_count":21,"forks_count":1,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-03-25T04:41:33.558Z","etag":null,"topics":["broker","cloudfoundry","osbapi"],"latest_commit_sha":null,"homepage":null,"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/orange-cloudfoundry.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}},"created_at":"2016-01-14T07:50:33.000Z","updated_at":"2019-04-22T22:16:12.000Z","dependencies_parsed_at":"2022-09-06T07:11:28.324Z","dependency_job_id":null,"html_url":"https://github.com/orange-cloudfoundry/static-creds-broker","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orange-cloudfoundry%2Fstatic-creds-broker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orange-cloudfoundry%2Fstatic-creds-broker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orange-cloudfoundry%2Fstatic-creds-broker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orange-cloudfoundry%2Fstatic-creds-broker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/orange-cloudfoundry","download_url":"https://codeload.github.com/orange-cloudfoundry/static-creds-broker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248358548,"owners_count":21090401,"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":["broker","cloudfoundry","osbapi"],"created_at":"2025-03-08T13:28:21.293Z","updated_at":"2025-04-11T06:50:36.933Z","avatar_url":"https://github.com/orange-cloudfoundry.png","language":"Java","readme":"# static-creds-broker [![Build Status](https://travis-ci.org/orange-cloudfoundry/static-creds-broker.svg?branch=master)](https://travis-ci.org/orange-cloudfoundry/static-creds-broker)\n\nA CloudFoundry service broker to ease exposition of static credentials in the CF marketplace, without requiring software development.\n\n# Intro\n\nThis generic service broker is used by service providers to expose one or more services systematically returning static credentials, along with static service catalog. A static-creds-broker instance is usually configured to return distinct catalog and binding credentials per service and per service plan.\n\nDeploying a static-creds-broker instance takes few minutes: configure the static data to be returned, and ``cf push`` the pre-built static-creds-brokers binaries.\n\nWhen deploying a static-creds-broker instance on cloudfoundry, configure it either through \n- environment variables (see [manifest.tmpl.yml](manifest.tmpl.yml) for an example CF CLI manifest), \n- a yaml configuration file deployed along with the broker, see [yaml deployment procedure](use_yaml_config.md)\n- a yaml configuration file fetched from a remote git repository over the network\n(see [manifest.tmpl.remote-config.yml](manifest.tmpl.remote-config.yml) for an example CF CLI manifest using this configuration mode).\n\nNotice that the default behavior is to fetch configuration properties from a remote git repo.  \nTo disable the default behavior, please set following env variable : SPRING_PROFILES_ACTIVE: native\n\nAlso note that the 2.X static-creds-broker releases are only compatible with **Diego backends** and do not support DEA backends (more details in [issue 27](https://github.com/orange-cloudfoundry/static-creds-broker/issues/27). To use static-creds-brokers with DEA backends, please use the latest 1.X branch release such as https://github.com/orange-cloudfoundry/static-creds-broker/tree/v1.3 and the associated 1.X configuration syntax.\n\n# Usage overview\n\n```sh\n# Download the latest binary release of this broker\nLATEST_RELEASE_URL=$(curl -s https://api.github.com/repos/orange-cloudfoundry/static-creds-broker/releases/latest | grep browser_download_url | head -n 1 | cut -d '\"' -f 4)\necho \"Downloading $LATEST_RELEASE_URL\"\ncurl -O -L $LATEST_RELEASE_URL\n\n# Unzip the zip release of this broker. The zip contains binary release and manifest template file.\nunzip static-creds-broker.zip\n\n# Configure the broker through environment variables, possibly captured in a CF CLI manifest file\n# Example manifest files (manifest.tmpl.yml, manifest.tmpl.yaml-config.yml, manifest.tmpl.remote-config.yml)\n# are provided, create a manifest.yml file by adapting it to your environment (in particular set the domain)\n# Remember that credentials can be set using env variables (see manifest.tmpl.yml), using local configuration properties\n#(see manifest.tmpl.yaml-config.yml) or by referencing external configuration properties backed in a remote git repository\n#(see manifest.tmpl.remote-config.yml)\n# Note: Be careful that services and plans name should be unique in the scope of your Cloud Foundry platform.\n\ncat \u003c\u003c- EOF \u003e manifest.yml\n---\napplications:\n- name: my-broker\n  memory: 256M\n  instances: 1\n  host: mybroker\n  domain: my-admin-domain.cf.io\n  path: static-creds-broker-2.0.jar \n\n  env:\n    SECURITY_USER_PASSWORD: MySecurePwd\n    SERVICES[ID]_NAME: MyService\n    SERVICES[ID]_DESCRIPTION: My existing service\n    SERVICES[ID]_METADATA_LONG_DESCRIPTION: A long description for my service\n    SERVICES[ID]_CREDENTIALS[URI]: mysql://USERNAME:PASSWORD@HOSTNAME:PORT/NAME\nEOF\n\n# deploy the broker    \ncf push \n\n# Register the broker system-wise (requires cloudcontroller.admin i.e. admin access to the CloudFoundry instance)\n# refer to http://docs.cloudfoundry.org/services/managing-service-brokers.html#register-broker\ncf create-service-broker mybrokername someuser somethingsecure http://mybroker.example.com/\n# Then make individual services visibles in desired orgs or in all orgs,\n# see  http://docs.cloudfoundry.org/services/access-control.html#enable-access\ncf enable-service-access MyService\n\n# Alternatively, register as a private service broker for one space or one org\n# get the CF cli 6.16 or the latest edge binaries from https://github.com/cloudfoundry/cli#downloads\n# cf create-service-broker SERVICE_BROKER USERNAME PASSWORD URL [--space-scoped]\ncf create-service-broker mybrokername user MySecurePwd http://mybroker.my-admin-domain.cf.io --space-scoped\n\n# Check presence of the service in the marketplace, and proper description of its plan\ncf m\ncf m -s MyService\n\n# Create a service instance and service key to check proper binding of the static credentials\ncf cs MyService myplan static-creds-instance\ncf create-service-key static-creds-instance static-service-key\ncf service-key static-creds-instance static-service-key\n```\n\n# Config reference\n\nThis section lists the configuration key/values that this broker supports (passed through env vars or yml config files).\n\nConventional notation: \n- {SERVICE_ID} should be replaced in keys by your own service id which is a string used to identify service. \n- {PLAN_ID} should be replaced in key by your own plan id which is a string used to identify different plans defined in a service.\n\nPlease notice that from 2.X version, there has been a complete refactoring leading to non backward compatible API changes.\nThus, to benefit from new 2.X version, you will need to review your exiting configuration to ensure it is compliant\nwith new config reference.\n\n| 1.x version   | 2.X version |\n| ------------- | ------------- |\n| SERVICES_{SERVICE_ID}_NAME  |SERVICES[{SERVICE_ID}]_NAME  |\n| SERVICES_{SERVICE_ID}\\_PLAN\\_{PLAN_ID}_NAME  | SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_NAME  |\n| SERVICES_{SERVICE_ID}_CREDENTIALS_URI  |SERVICES[{SERVICE_ID}]\\_CREDENTIALS\\[URI] |\n| ..._METADATA_DISPLAYNAME | _METADATA_DISPLAY_NAME |\n| ..._METADATA_IMAGEURL | _METADATA_IMAGE_URL |\n| ..._METADATA_SUPPORTURL | _METADATA_SUPPORT_URL |\n| ..._METADATA_DOCUMENTATIONURL | _METADATA_DOCUMENTATION_URL |\n| ..._METADATA_PROVIDERDISPLAYNAME | _METADATA_PROVIDER_DISPLAY_NAME |\n| ..._METADATA_LONGDESCRIPTION | METADATA_LONG_DESCRIPTION |\n| ..._CREDENTIALS = {json} |  _CREDENTIALS_JSON = {json} |\n\n\n## Catalog\n\nThe catalog exposed by the broker is controlled by environment variables matching the [service broker catalog endpoint response](http://docs.cloudfoundry.org/services/api.html#catalog-mgmt). \n* SERVICES[{SERVICE_ID}]_NAME (mandatory String, no default): the technical name of the service which should be unique\namong the cloudfoundry installation to register with (among orgs and spaces).\n* SERVICES[{SERVICE_ID}]_DESCRIPTION (mandatory String, no default)\n* SERVICES[{SERVICE_ID}]_BINDEABLE (default is \"true\"). Useful for service keys.\n* SERVICES[{SERVICE_ID}]_TAGS (String holding an array-of-strings, multiple tags are separated by comma,\nas ```tag1,tag2,tag3```, default is ```[]```)\n* SERVICES[{SERVICE_ID}]_REQUIRES (String holding an array-of-strings, multiple requires are separated by comma,\nas ```syslog_drain, volume_mount```, default is ```[]```). A list of permissions that the user would have to give the service, if they provision it. The only permission currently supported is syslog_drain.\n* SERVICES[{SERVICE_ID}]_DASHBOARD_URL (String, no default). The URL of a web-based management user interface for the service instance.\n* SERVICES[{SERVICE_ID}]_METADATA_DISPLAY_NAME (String, default is SERVICES_ID_NAME). The user-facing name of the service.\n* SERVICES[{SERVICE_ID}]_METADATA_IMAGE_URL (String, default is \"\")\n* SERVICES[{SERVICE_ID}]_METADATA_SUPPORT_URL (String, default is \"\")\n* SERVICES[{SERVICE_ID}]_METADATA_DOCUMENTATION_URL (String, default is \"\")\n* SERVICES[{SERVICE_ID}]_METADATA_PROVIDER_DISPLAY_NAME (String, default is \"\")\n* SERVICES[{SERVICE_ID}]_METADATA_LONG_DESCRIPTION (String, default is \"\")\n\nMultiple plans are supported. Use the following environment variables to configure it, or let the default values apply:\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_NAME (String, default is \"default\")\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_DESCRIPTION (String, default is \"Default plan\")\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_METADATA (String holding a JSON object, default is \"{}\")\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_FREE (String, default is \"true\")\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_DASHBOARD_URL (String, no default). The URL of a web-based management user interface for the service instance.\n\nA number of catalog variables are not configureable, the broker always return the following default value:\n* requires: ```[]``` (empty array)\n* plan_updateable: false\n* dashboard_client: ````{}```` (empty)\n\n## credentials binding\n\nThe returned credentials are identical for all bound service instances of a specific plan.\n\nThe credentials could be defined for a service, it will be applied for all plans of the service.\nIt is configured by the following environment variables:\n* SERVICES[{SERVICE_ID}]\\_CREDENTIALS\\[URI] String. Recommended\nsee http://docs.cloudfoundry.org/services/binding-credentials.html\n* SERVICES[{SERVICE_ID}]\\_CREDENTIALS\\[HOSTNAME] String. Optional\n* SERVICES[{SERVICE_ID}]\\_CREDENTIALS\\[{MYOWNKEY}] String. It is for flat custom keys. Note, it's case sensitive.\nFor example. you could specify ```SERVICES[{SERVICE_ID}]_CREDENTIALS_ACCESS_KEY: azert```, the returned credentials will\n contain a key named \"ACCESS_KEY\" ```{..., \"ACCESS_KEY\":\"azert\", ...}```\n* SERVICES[{SERVICE_ID}]\\_CREDENTIALS\\_JSON: a String holding a Json hash potentially compound the same format as\n 'cf cups', e.g. ```'{\"username\":\"admin\",\"password\":\"pa55woRD\"}'```\n\nThe credentials could also be defined for a particular plan, if it contains conflict credential key between the service\ncredentials and plan credentials, the values of the plan credentials will be taken.\nIt is configured by the following environment variables:\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_CREDENTIALS\\_[URI] String.\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_CREDENTIALS\\_[HOSTNAME] String. Optional\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]\\_CREDENTIALS\\_[{MYOWNKEY}] String.\nIt is for flat custom keys, as SERVICES[{SERVICE_ID}]\\_CREDENTIALS\\_[{MYOWNKEY}]\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_CREDENTIALS_JSON: a String holding a Json hash potentially compound\nthe same format as 'cf cups', e.g. ```'{\"username\":\"admin\",\"password\":\"pa55woRD\"}'```\n\nThis is mapped to [spring-cloud-cloudfoundry-service-broker](https://github.com/spring-cloud/spring-cloud-cloudfoundry-service-broker/blob/master/src%2Fmain%2Fjava%2Forg%2Fspringframework%2Fcloud%2Fservicebroker%2Fmodel%2FCreateServiceInstanceBindingResponse.java#L35) \n\n## syslog_drain_url binding\n\nThe returned syslog_drain_url is identical for all bound service instances of a specific plan.\n\nThe syslog_drain_url could be defined for a service, it will be applied for all plans of the service.\nIt is configured by the following environment variables:\n* SERVICES[{SERVICE_ID}]\\_SYSLOG_DRAIN_URL String.\n\nThe syslog_drain_url could also be defined for a particular plan, if it contains conflict syslog_drain_url key between the service\nsyslog_drain_url and plan syslog_drain_url, the values of the plan syslog_drain_url will be taken.\nIt is configured by the following environment variables:\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]_SYSLOG_DRAIN_URL String.\n\nIf syslog_drain_url has been defined, ```SERVICES[{SERVICE_ID}]_REQUIRES``` property with a value ```syslog_drain``` must be declared in the Catalog endpoint or the service broker would consider the configuration invalid.\n\n## volume_mount binding\n\nThe returned volume_mount is identical for all bound service instances of a specific plan.\n\nThe volume_mount could be defined for a service, it will be applied for all plans of the service.\nIt is configured by the following environment variables:\n* SERVICES[{SERVICE_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_CONTAINER_DIR (String).\n* SERVICES[{SERVICE_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_DRIVER (String).\n* SERVICES[{SERVICE_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_MODE (String, possible values : ```\"READ_ONLY\"```, ```\"READ_WRITE\"```).\n* SERVICES[{SERVICE_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_DEVICE_TYPE (String, possible values : ```\"shared\"```).\n* SERVICES[{SERVICE_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_DEVICE_VOLUME_ID (String).\n* SERVICES[{SERVICE_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_DEVICE_MOUNT_CONFIG_[{MOUNT_KEY}] (String).\nFor example. you could specify ```SERVICES[{SERVICE_ID}]\\_VOLUME_MOUNT[0]\\_DEVICE_MOUNT_CONFIG_[source]: \"nfs://...\"```\n\nThe volume_mount could also be defined for a particular plan, if it contains conflict volume_mount key between the service\nvolume_mount and plan volume_mount, the values of the plan volume_mount will be taken.\nIt is configured by the following environment variables:\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_CONTAINER_DIR (String).\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_DRIVER (String).\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_MODE (String, possible values : ```\"READ_ONLY\"```, ```\"READ_WRITE\"```).\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_DEVICE_TYPE (String, possible values : ```\"shared\"```).\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_DEVICE_VOLUME_ID (String).\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]\\_VOLUME_MOUNT[{INDEX}]\\_DEVICE_MOUNT_CONFIG_[{MOUNT_KEY}] (String). \nFor example. you could specify ```SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]\\_VOLUME_MOUNT[0]\\_DEVICE_MOUNT_CONFIG_[source]: \"nfs://...\"```\n\nIf volume_mount has been defined, ```SERVICES[{SERVICE_ID}]_REQUIRES``` property with a value ```volume_mount``` must be declared in the Catalog endpoint or the service broker would consider the configuration invalid.\n\n## route service binding\n\nThe returned route service url is identical for all bound service instances of a specific plan.\n\nThe route service url could be defined for a service, it will be applied for all plans of the service.\nIt is configured by the following environment variables:\n* SERVICES[{SERVICE_ID}]\\_ROUTE_SERVICE_URL (String).\n\nThe route service url could also be defined for a particular plan, if it contains conflict route service url key between the service\nroute_service_url and plan route_service_url, the values of the plan route_service_url will be taken.\nIt is configured by the following environment variables:\n* SERVICES[{SERVICE_ID}]\\_PLANS\\[{PLAN_ID}]\\_ROUTE_SERVICE_URL (String).\n\nIf route_service_url has been defined, ```SERVICES[{SERVICE_ID}]_REQUIRES``` property with a value ```route_forwarding``` must be declared in the Catalog endpoint or the service broker would consider the configuration invalid.\n\n## Authentication\n\nThe service broker authenticates calls coming from Cloud Foundry through basic auth\n(see [more context](http://docs.cloudfoundry.org/services/api.html#authentication)) controlled by the following two environment variables\n* SECURITY_USER_NAME: String default is \"user\"\n* SECURITY_USER_PASSWORD: String (mandatory, no default)\n\n# Troubleshoot Deployment Problems\nIf the deployment of the broker fails, you could find the error message using cf cli:\n```\n$ cf logs \u003capp_name\u003e --recent | findstr Caused\n# or more complete error information with:\n$ cf logs \u003capp_name\u003e --recent | findstr ERR\n```\n\n# Acceptance Test\nAcceptance tests source code is available in the \"acceptance\" folder. To run it locally, you should:\n- Install robotframework with ```pip install robotframework```. More details on [robotframework installation](https://code.google.com/archive/p/robotframework/wikis/Installation.wiki)\n- Deploy a test application in your Cloud Foundry environment. (ex. a [static website](https://github.com/cloudfoundry/staticfile-buildpack))\n- Retrieve the content of the \"acceptance\" folder from the sources to your {ACCEPTANCE_TEST_DIRECTORY}.\n- Set the environment variables required:\n  - copy ```{ACCEPTANCE_TEST_DIRECTORY}/acceptance.tmpl.env``` to ```{ACCEPTANCE_TEST_DIRECTORY}/acceptance.env``` \n  - fill the information in ```{ACCEPTANCE_TEST_DIRECTORY}/acceptance.env``` \n  - source it ```source {ACCEPTANCE_TEST_DIRECTORY}/acceptance.env```\n- Run the acceptance test with the command: \n```\nrobot --pythonpath {ACCEPTANCE_TEST_DIRECTORY}/classes/ {ACCEPTANCE_TEST_DIRECTORY}\n```\n\n# FAQ\n\n## Why not using CUPS ?\n\n[User provided service instances](https://docs.cloudfoundry.org/devguide/services/user-provided.html) is a syntaxic\nsupport in CF targetted at application teams to expose static credentials as a service instance.\n\nLimitations of the UPS approach:\n * Service providers are not involved/notified when a CUPS is created \n    * making it harder to track who is referencing their service, e.g. to deprecate the service\n    * making it harder to charge/bill for service usage\n    * making it harder to notify users of changes (e.g. through notification service)\n * Discovery of the service requires out-of-band communication between application teams and service provider team,\n while the CF marketplace plays this role\n    * This includes pointers to documentation, support ...\n  * does not allow for automation, such as opening security groups to access IPs provided in credentials\n  (see https://github.com/Orange-OpenSource/sec-group-brokerchain )\n\n## Why not implementing a service broker using the community SDKs ?\n\nMature SDKs are available for Java through [spring-cloud-cloudfoundry-service-broker](https://github.com/spring-cloud/spring-cloud-cloudfoundry-service-broker) or [cf-java-component](https://github.com/cloudfoundry-community/cf-java-component/tree/master/cf-service-broker)\n(see associated [intro video](https://www.youtube.com/watch?v=AcpdO_AfEH0#t=11m43s) , ruby, go to ease implementing the [service broker REST API](http://docs.cloudfoundry.org/services/api.html).\nSee [examples implementation](http://docs.cloudfoundry.org/services/examples.html)\n\nProof-of-concept SDK have been contributed for [PHP](https://github.com/cloudfoundry-community/php-cf-service-broker)\n\nSome service provider teams (or app teams needing to expose services) might find the static-creds-broker useful because:\n* they lack a SDK in a programming language the service provider team is confortable with\n* they don't need to program, it's mainly static configuration needed.\n* they don't have to maintain a broker implementation as the service broker API get enriched or gets possible breaking changes, the static-cred-broker is maintained\n\n# Future work/backlog\n\nSee github issues for the list of future features planned, with associated milestones reflecting relative priority (see convenient [huboard](https://huboard.com/orange-cloudfoundry/static-creds-broker#/milestones) for contributors to reorder priorities). Comments and refinements are welcomed. \n\nPlease suggest more ideas by submitting new issues.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forange-cloudfoundry%2Fstatic-creds-broker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forange-cloudfoundry%2Fstatic-creds-broker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forange-cloudfoundry%2Fstatic-creds-broker/lists"}