Keycloak change registration flow / create user API - node.js

Lately, I am playing with keylock server. I have an application which has a bit of complication in the registration flow, and I need to change the basic flow of keycloak. Is this possible? For example, when a user fills the needed data, and
clicks to register, I want to redirect him directly to my site and not to keycloak server ( profile manager ).
Also, I am trying to add a user via API, using 'node.js', which would be the easiest way. However, it seems I can't get it done. Does anyone have or know of some kind of tutorial, that can help me, or point me in the right direction?
EDIT:
What I tried is create bash script and add user via rest
#!/bin/bash
export TKN=$(curl -X POST 'http://localhost:8080/auth/realms/master/protocol/openid-connect/token' \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username=admin" \
-d 'password=admin' \
-d 'grant_type=password' \
-d 'client_id=admin-cli' | jq -r '.access_token')
curl -X POST 'http://localhost:8080/auth/admin/realms/demo/users' \
-H "Accept: application/json" \
-d "username=abc
-H "Authorization: Bearer $TKN" | jq .
It doesn't throw any error. But in keycloak I can't see any new user.

Is this possible? For example, when a user fills the needed data, and clicks to register, I want to redirect him directly to my site and not to keycloak server ( profile manager ).
Yes. You can add a user via REST API.
Also, I am trying to add a user via API, using 'node.js', which would be the easiest way. However, it seems I can't get it done. Does anyone have or know of some kind of tutorial, that can help me, or point me in the right direction?
This is an example how to create a user using Keycloak REST API:
https://github.com/v-ladynev/keycloak-nodejs-example/blob/master/lib/adminClient.js#L35
It doesn't throw any error. But in keycloak I can't see any new user.
Looks like, you provided incorrect parameters, or didn't provide mandatory parameters.

I think what you are asking can be broken down to two questions...
how to change the flow ( This is what i m currently trying to find out),
what keycloak command line commands allow for user registration etc.
These should be the CLI commands e.g. client-registration-cli though there is as you say a REST API as well.

you add the role managerusers to your user that you will create the new user with in keycloak

Related

Getting repository contents using GitHub API

I know there is an API for getting repository content. But my use case is I need to get the whole repository and display it in my UI like GitHub UI. Similar to GitHub UI, I need my repository to be displayed in my UI. Is there any API I can use to get the whole repository so I can display that in my UI.
I tried this API.
curl \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer <YOUR-TOKEN>" \
https://api.github.com/repos/OWNER/REPO/zipball/REF
But it gives separate file contents. I need the whole repo.
Getting the all repository remains easier with a simple git clone. No need for an API call there.
If, as mentioned in this 2016 octokit issue, you cannot clone through GitHub API, you could use libgit2sharp to integrate the clone operation in your application.

How can I GET a json of all the projects I have access to using Gitlab API?

I want to get a json file with all the projects that appear on my Dashboard and that I have developer access to. I though it would be a very simple job using the Gitlab API, more specifically the projects API, but so far, I can't. Is it possible?
Note : I generated a token with api scope.
Here's what I tried and the results :
curl --header "PRIVATE-TOKEN: XXXXX" https://gitlab.com/api/v3/projects
It gives me all the projects I don't own but I have master access to. It doesn't include the ones I have developer/other access to. The result is the closest to what I'm looking for so far.
curl --header "PRIVATE-TOKEN: XXXXX" https://gitlab.com/api/v4/projects
It gives me a list of projects I seem to have access to, even though I have no idea what they are.
curl --header "PRIVATE-TOKEN: XXXXX" https://gitlab.com/api/v4/users/myUser/projects
It gives me all the projects I own. I thought that one would work since the documentation says Get a list of visible projects for the given user. I also tried with the membership attribute set to true or false, but there is no difference.
Any advice/help would be appreciated!
I know this is old question, but maybe other will stumble over this as I just did.
My solution was adding the per_page option
curl -s -X GET -H 'Private-Token: ' 'https://gitlab.com/api/v4/projects?per_page=100'

Upload file on Linux (CLI) to Dropbox (via bash/sh)?

I need to save (and overwrite) a file via the cron (hourly) to my dropbox account. The file needs to be stored in a predefined location (which is shared with some other users).
I have seen the possibility to create a Dropbox App, but that create its own dropbox folder.
Also looked at Dropbox Saver but that seems for browsers.
I was thinking (hoping) something super lightweight, a long the lines of CURL, so i don't need to install libraries. Just a simple sh script would be awesome. I only need to PUT the file (overwrite), no need to read (GET) it back.
Was going thru the dropbox developer API documentation, but kind of got lost.
Anybody a good hint?
First, since you need to access an existing shared folder, register a "Dropbox API" app with "Full Dropbox" access:
https://www.dropbox.com/developers/apps/create
Then, get an access token for your account for your app. The easiest way is to use the "Generate" button on your app's page, where you'll be sent after you create the app. It's also accessible via the App Console.
Then, you can upload to a specified path via curl as shown in this example:
This uploads a file from the local path matrices.txt in the current folder to /Homework/math/Matrices.txt in the Dropbox account, and returns the metadata for the uploaded file:
echo "some content here" > matrices.txt
curl -X POST https://content.dropboxapi.com/2/files/upload \
--header "Authorization: Bearer <ACCESS_TOKEN>" \
--header "Dropbox-API-Arg: {\"path\": \"/Homework/math/Matrices.txt\"}" \
--header "Content-Type: application/octet-stream" \
--data-binary #matrices.txt
<ACCESS_TOKEN> should be replaced with the OAuth 2 access token.
#Greg's answer also works but seems like a long chore.
I used Dropbox's official command-line interface here: https://github.com/dropbox/dbxcli.
As the date of posting, it is working fine and provides lots of helpful commands for downloading and uploading.
Another solution I just tried is a bash utility called Dropbox-Uploader.
After configuration through the same steps as above (app creation and token generation), you can just do: ./dropbox_uploader.sh upload mylocal_file my_remote_file, which I find pretty convenient.

Dashboard with builds, commits and files from GitLab

How do I do dashboard with information from my GitLab repo? I don't know how I get information about builds, commits and files and create dashboard with this information. Any idea? Thank you very much.
You can use GitLab's API to obtain the information from GitLab. You will need to have an user account which can access a particular project. Get this user's "Private Token" from the /profile/account page and then you can make requests for which you would get a JSON response.
Retrieving latest commits
curl -H "PRIVATE-TOKEN: [TOKEN]" \
"https://[HOST]/api/v3/projects/[PROJECT ID]/repository/commits"
Retrieving latest builds
curl -H "PRIVATE-TOKEN: [TOKEN]" \
"https://[HOST]/api/v3/projects/[PROJECT ID]/repository/builds"
These are examples using curl. Depending on the programming language you are going to use, you will have to make a GET request while setting a HTTP header (that is what -H in my example stands for) named PRIVATE-TOKEN.

How to get realtime updates for post edits from the Instagram API when subscribed to a tag?

I've subscribed to realtime updates for a specific tag via the Instagram API using this code (as provided in the API docs):
curl -F 'client_id=CLIENT_ID' \
-F 'client_secret=CLIENT_SECRET' \
-F 'object=tag' \
-F 'aspect=media' \
-F 'verify_token=MY_SECURITY_TOKEN' \
-F 'object_id=TAG_NAME' \
-F 'callback_url=MY_CALLBACK_URL' \
https://api.instagram.com/v1/subscriptions/
This is working well, Instagram calls MY_CALLBACK_URL whenever there is a new post with the tag TAG_NAME.
My callback script fetches and stores all the data from Instagram in my local database so I don't have to fetch everything each time somebody visits my site. The problem is I don't get a notification when a post is edited or deleted, so often times the data in my local DB will be outdated.
To solve that I suppose I could ...
... set up a real time subscription for every single post I get (which doesn't sound like a good idea for obvious reasons)
... not keep a local copy of the data and instead fetch everything from Instagram every time somebody visits my site (which would probably push the API limits pretty quick)
What's the best practice here?
I think it's a bit of a grey area regarding storing data. I setup an identical setup with the real-time API that stored image URL's in a MySQL database.
Then, client-side I use the Jquery ImageLoaded library before showing images on the page to determine if they still exist or not. It's a bit crude but it works.

Resources