Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement Organizations Endpoint #4

Closed
NickDelta opened this issue Jan 9, 2021 · 0 comments
Closed

Implement Organizations Endpoint #4

NickDelta opened this issue Jan 9, 2021 · 0 comments
Assignees
Labels
enhancement New feature or request

Comments

@NickDelta
Copy link
Owner

NickDelta commented Jan 9, 2021

Αυτό το issue ουσιαστικά απαρχαιώνει το issue #3 και το αντικαθιστά τελείως.
Το έτοιμο REST API που δίνει το keycloak στο δικό μας use case με τους οργανισμούς δεν είναι και πολύ ευέλικτο. Οπότε σκοπός είναι να κατασκευαστεί ένα custom endpoint που θα διευκολύνει όλο το business logic που έχει να κάνει με αυτό. Οπότε το νέο endpoint πρέπει εν συντομία:

  • Να μπορεί να επιστρέφει με pagination μηχανισμό τους οργανισμούς
  • Να μπορεί να δημιουργεί νέους οργανισμούς (μάζι με τα subgroups, ρόλους των subgroup κτλ μέσω μονάχα μιας κλήσης)
  • Να μπορεί να επιστρέφει με ευκολία τους supervisors και τους employees κάθε οργανισμού πάλι μέσω pagination
  • Τέλος πολύ σημαντικό είναι να μπορούν να χρησιμοποιηθούν και τα συμβατικά endpoints μέσω του νέου endpoint. Οπότε με κάτι μαγικά του RESTEasy (ένος Web Services framework που στηρίζεται πάνω στο JAX-RS και χρησιμοποιεί το Keycloak - θα σας εξηγήσω κάποια βασικά πραγματάκια σε skype call μας) θα υπάρχει η δυνατότητα να χρησιμοποιήσετε εύκολα τα συμβατικά endpoints μόλις εντοπίσετε το resource που θέλετε (User/Group κτλ).

Επίσης για να κάνω το integration ακόμα πιο εύκολο, θα τροποποιήσω και την REST Client βιβλιοθήκη που δίνουν οι devs του keycloak. Οπότε για παράδειγμα, αν κάποιος θέλει μια λίστα με τους πρώτους 100 supervisors του οργανισμού HUA , τότε απλά θα πρέπει να κάνει αυτό :

List<UserRepresentation> supervisors = client.organizations().organization("HUA").supervisors().list(0,100);

δεδομένου βέβαια ότι έχει κάνει σωστό config όταν φτιάχνει το HermesKeycloak client του (το οποίο δεν θα διαφέρει από το κλασικό Keycloak client στο config - αυτό είναι το ζητούμενο):

HermesKeycloakBuilder.builder()
                .serverUrl(serverUrl)
                .grantType(OAuth2Constants.CLIENT_CREDENTIALS)
                .realm(realm)
                .clientId(clientId)
                .clientSecret(clientSecret)
                .resteasyClient(
                        new ResteasyClientBuilder()
                                .connectionPoolSize(10)
                                .build()
                ).build();

Κάποιες σημειώσεις τώρα πιο DevOps - Μaintainance χαρακτήρα σχετικά με αυτό. Σε ένα κανονικό πρότζεκτ, πιστεύω ότι η καλύτερη τακτική θα ήταν να δημιουργηθεί ένα maven repository που θα είχε artifacts του custom client που θα φτιαχτεί. Έτσι κάθε φορά που θα γινόταν μια αλλαγή στο API, τότε μέσω CI/CD οι αλλαγές του client θα πακεταριζόντουσαν σε νέο artifact, έτοιμο να κουμπωθεί σε οποιοδήποτε άλλο πρότζεκτ θέλαμε. Το θεωρώ περιττό όμως για αυτό το πρότζεκτ, ο κόπος του να στήσω τέτοιο pipeline είναι μεγαλύτερος από τον κόπο του να το διαχειριστούμε manually. Αυτό που πρέπει να θυμόμαστε λοιπόν είναι ότι αν γίνει κάποια αλλαγή σε αυτό το API που χρειάζεται αλλαγή και στον client, τότε ο client πρέπει να ενημερωθεί επίσης σε κάθε πρότζεκτ το οποίο το χρησιμοποιούμε.

Περισσότερες πληροφορίες πάνω στη χρήση αυτού του endpoint, θα δωθούν σε skype call.

@NickDelta NickDelta added the enhancement New feature or request label Jan 9, 2021
@NickDelta NickDelta self-assigned this Jan 9, 2021
NickDelta added a commit to NickDelta/hermes-internal-front-end that referenced this issue Jan 10, 2021
Adds some basic utils that will come handy
Adds Error handling / views
Adds HermesKeycloak client ( NickDelta/hermes-keycloak-image#4 )
NickDelta added a commit to NickDelta/hermes-internal-front-end that referenced this issue Jan 10, 2021
Adds some basic utils that will come handy
Adds Error handling / views
Adds HermesKeycloak client ( NickDelta/hermes-keycloak-image#4 )
Adds KeycloakTokenHelper (same with backend)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

1 participant