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
>
>
>
>

Reply via email to