Git Product home page Git Product logo

mbop's Introduction

Mock BOP service

This service is used to replace the BOP service in Ephemeral environments.

It starts up an HTTP server on port 8090, and forwards requests to different endpoints depending on the URL paths the user requests.

It is meant to be run alongside a Keycloak service, where it can fetch and print information about users and realms.

Pre-requisites

While not essential for running this service, you'll need a local Keycloak server with a pre-configured realm named redhat-external on it, and some users, with the following attributes:

  • is_active: type: Boolean
  • is_org_admin: type: Boolean
  • is_internal: type: Boolean
  • account_id: type: String
  • org_id: type: String
  • entitlements: type: String
  • account_number: type: String

List of supported paths

The current list of supported paths is:

  • / : Empty endpoint, used as a status check endpoint.
  • /v1/users : only POST requests are allowed. Used to fetch Keycloak users
  • /v1/jwt : sends a GET request against the KEYCLOAK_SERVER URL and prints the redhat-external realm public key
  • /v1/auth : it expects a basic Authorization Header to be sent with username and password, and uses it to request a token from the redhat-external realm from the KEYCLOAK_SERVER URL for that user. Then returns the user entity.
  • /v1/accounts : handles POST and GET requests for querying users for a specific account
  • /v2/accounts : expects a GET request with query params defining filters to fetch users on Keycloak
  • /api/entitlements/v1/services : prints a user's entitlements list based on the provided Identity header (only Basic Auth is supported). if the enviroment variable ALL_PASS is found then a fixed JSON object with entitlements is printed instead.

How to run

pre-requisites

You'll need a Keycloak Server running for the Keycloak-related requests to succed, and pass in the Server URL, Admin username and password using the KEYCLOAK_SERVER, KEYCLOAK_USERNAME and KEYCLOAK_PASSWORD environment variables respectively.

The current supported version of Keycloak is: 15.0.2 , based on the Keycloak version that Clowder uses

You will also need a valid Keycloak realm named redhat-external as MBOP expects it to be pre-created. There's a realm template you can import to your Keycloak server to help you get started, it defines the redhat-external realm and a test user.

How to run Locally

It is recommended if you simply spin a container with a Keycloak server that imports the demo-realm.

You can do it using rootless podman by running:

podman run -it --name keycloak -p 8080:8080 \
    -e KEYCLOAK_ADMIN_USER=admin \
    -e KEYCLOAK_ADMIN_PASSWORD=change_me \
    -e KEYCLOAK_IMPORT=/opt/keycloak/data/import/redhat-external-realm.json \
    -v ${PWD}/data/redhat-external-realm.json:/opt/keycloak/data/import/redhat-external-realm.json:z \
    quay.io/keycloak/keycloak:15:0.2

Then run MBOP, either building and running it locally:

$ go build

$ KEYCLOAK_SERVER='http://localhost:8080' KEYCLOAK_USERNAME='admin' KEYCLOAK_PASSWORD='change_it' ./mbop

Or you can also build the image container and run it locally with podman:

podman build -t localhost/mbop:dev .
podman run -it --rm --name mbop -p 8090:8090 -e KEYCLOAK_SERVER='http://localhost:8080' KEYCLOAK_USERNAME='admin' KEYCLOAK_PASSWORD='change_it'  localhost/mbop:dev

You can also leverage the provided podman-compose.yaml template and run it all together:

PLEASE NOTE : if SELINUX is enforced, you have to provide the :z label for the bind mount Realm file to import successfully.

mv deployments/podman-compose-env deployments/.env

podman-compose -f podman_compose.yaml up -d --build

How to test ?

Unit tests

Simply run

go test ./...

E2E tests

setup a local environment running Keycloak and MBOP:

docker-compose -f deployments/compose.yaml up --build -d

NOTE for podman-compose when SELINUX is enforced: You'll have to set the SELINUX_LABEL environment variable from deployments/compose.yaml to :z for the Keycloak Realm import to succeed. You can use the deployments/podman-compose-env file for that purpose.

podman-compose -f deployments/compose.yaml up -d

you can run Mocha tests with

# npm --prefix test test

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.