Hi MK, Is Python an option for you? I’ve used this API wrapper in the past: https://github.com/pschmitt/guacapy
Russ On Sun, Feb 11, 2024 at 01:38 [email protected] <[email protected]> wrote: > I forgot to add the logs: > > DEBUG o.a.g.rest.RESTExceptionMapper - Unexpected error in REST endpoint. > Feb 10 15:24:36 server[104645]: java.lang.NullPointerException: null > > "POST /guacamole/api/session/data/mysql/connections HTTP/1.1" 500 203 > > ----------- > Regards > MK > > ---------------------------- > > Dnia 10 lutego 2024 15:27 [email protected] <[email protected]> napisał(a): > > Hi Nick, > > Thank you for your response! > I modified the script according to your information. > > *---------------------- SCRIPT ----------------------* > #!/bin/bash > > # Obtain the Guacamole authentication token > TOKEN=$(curl -s -X POST -H "Content-Type: > application/x-www-form-urlencoded" -d > "username=guacadmin&password=guacadmin" > http://localhost:8080/guacamole/api/tokens | jq -r '.authToken') > > # Define the API endpoint for creating connections in Guacamole > API_ENDPOINT=" > http://localhost:8080/guacamole/api/session/data/mysql/connections" > > # Define the connection data in JSON format > CONNECTION_DATA='{ > "name": "Connection name", > "protocol": "rdp", > "parameters": { > "hostname": "10.194.53.45", > "port": "3389", > "username": "user", > "password": "password" > } > }' > > # Make a POST request to create a new connection using the Guacamole API > RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -H > "Guacamole-Token: $TOKEN" -d "$CONNECTION_DATA" $API_ENDPOINT) > > # Extract the connection identifier from the response > IDENTIFIER=$(echo "$RESPONSE" | jq -r '.identifier') > > if [ "$IDENTIFIER" != "null" ]; then > # Construct the base64url-encoded client identifier > CLIENT_IDENTIFIER=$(echo -n > "{\"id\":\"$IDENTIFIER\",\"type\":\"c\",\"dataSource\":\"mysql\"}" | base64 > -w0 | tr '+/' '-_' | tr -d '=') > URL="http://localhost:8080/guacamole/#/client/$CLIENT_IDENTIFIER" > echo "Client Identifier: $CLIENT_IDENTIFIER" > echo "URL: $URL" > else > echo -e "TOKEN: $TOKEN" > echo -e "RESPONSE: $RESPONSE" > echo -e "IDENTIFIER: $IDENTIFIER" > echo -e "Client Identifier: $CLIENT_IDENTIFIER" > echo "Error creating connection." > fi > ---------------------- SCRIPT END ---------------------- > > *I added some "echo" lines to see output:* > *------------------------------------------* > echo -e "TOKEN: $TOKEN" > echo -e "RESPONSE: $RESPONSE" > echo -e "IDENTIFIER: $IDENTIFIER" > echo -e "Client Identifier: $CLIENT_IDENTIFIER" > > *This is my result now:* > *-----------------------* > TOKEN: C789F89578D3D7F7956307C26FD24410DEF12D4403495A9E2FBA43E31F92557D > RESPONSE: {"message":"Unexpected internal > error","translatableMessage":{"key":"APP.TEXT_UNTRANSLATED","variables":{"MESSAGE":"Unexpected > internal error"}},"statusCode":null,"expected":null,"type":"INTERNAL_ERROR"} > IDENTIFIER: null > Client Identifier: > Error creating connection. > > Is is correct now? It looks like the "RESPONSE" curl URL is invalid?! > The "permission denied" disappeared, but another error appeared. > *-------------------------------------* > *Thank you for your help.* > -- > MK > > > > > Dnia 09 lutego 2024 16:47 Nick Couchman <[email protected]> napisał(a): > > On Fri, Feb 9, 2024 at 6:46 AM [email protected] <[email protected]> wrote: > > Hello, > > I've installed Apache Guacamole v.1.5.4 on Linux CentOS 8.5 - I'm able to > login to GUI, create users, connection, etc. > I installed database (MySQL) as well (to manage users, connection) with > all needed *.jar files according to doc > https://guacamole.apache.org/doc/gug/jdbc-auth.html > > After that, I'm able to login as ""guacadmin" user to GUI and manage > connections etc. > > Now, I want to create URL to direct connection to my VM, but I found > errors like below: > > ------------------------------ SCRIPT > ------------------------------------- > #!/bin/bash > > TOKEN=$(curl -s -X POST -H "Content-Type: > application/x-www-form-urlencoded" -d > "username=guacadmin&password=guacadmin" > http://localhost:8080/guacamole/api/tokens | jq -r '.authToken') > > # Endpoint API Guacamole > API_ENDPOINT=" > http://localhost:8080/guacamole/api/session/data/mysql/connections" > > CONNECTION_DATA='{ > "name": "Connection name", > "protocol": "rdp", > "parameters": { > "hostname": "10.194.53.45", > "port": "3389", > "username": "user", > "password": "password" > } > }' > > RESPONSE=$(curl -s -X POST -H "Content-Type: application/json" -H > "Authorization: Bearer $TOKEN" -d "$CONNECTION_DATA" $API_ENDPOINT) > > > I don't think you're using the correct header, here for the Guacamole > authentication token - you should be passing a header called > "Guacamole-Token" with the Guacamole authorization token. Guacamole does > not generally use the "Authorization" header. > > > > CONNECTION_ID=$(echo $RESPONSE | jq -r '.identifier') > > if [ "$CONNECTION_ID" != "null" ]; then > URL=" > http://localhost:8080/guacamole/#/client/$CONNECTION_ID?token=$TOKEN" > echo "Connection ID: $CONNECTION_ID" > echo "URL: $URL" > else > echo "Error creating connection." > fi > > > Two issues, here: > * We've removed the ?token= parameter in recent versions in favor of a > model that prefers/uses a header, instead, so you should leave off the > token= part of this. > * Your path for the connection (/client/$CONNECTION_ID) won't work - the > client identifier is not the same as the connection ID, but is, instead, a > base 64 encoding of the type of connection (connection or connection > group), the data source (pgsql, mysql, etc.), and the connection > identifier. See: > https://github.com/apache/guacamole-client/blob/22fe53fde50fd139cb86091912e1ae50d348add8/guacamole/src/main/frontend/src/app/navigation/types/ClientIdentifier.js#L40-L71 > > -Nick > > > >
