This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Latest commit

History

67 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This file is no longer maintained, for the most current documention on System Context please refer to the JumpCloud API Documentation

JumpCloud System Context API

Introduction

The JumpCloud System Context API is an alternative way to authenticate with a subset of JumpCloud's REST APIs. Using this method a system can manage it's information and resource associations, allowing modern auto provisioning environments to scale as needed.

Supported Endpoints

The system context API can be used in conjunction with Systems endpoints found in the V1 API and certain System Group endpoints found in the v2 API. You can review our API documention. for more details on these endpoints.

  • A system may fetch, alter, and delete metatdata about itself, including manipulating a system's Tag and Systemuser associations,
    • /api/systems/{system_id} | GETPUT
  • A system may delete itself from your JumpCloud organization
    • /api/systems/{system_id} | DELETE
  • A system may fetch it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/memberof | GET
    • /api/v2/systems/{system_id}/associations | GET
    • /api/v2/systems/{system_id}/users | GET
  • A system may alter it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/associations | POST
  • A system may alter it's System Group associations
    • /api/v2/systemgroups/{systemgroup_id} | POST
      • NOTE If a system attempts to alter the system group membership of a different system the request will be rejected
  • Note that the Groups endpoints are documented under the V2 section of our API Documentation.
  • Note that the Systems endpoints are documented under the V1 section of our API Documentation.

Response Codes

If endpoints other than those described above are called using the System Context API the server will return a 401 response.

Authentication

To allow for secure access to the API, you must authenticate each API request. The System Context API uses HTTP Signatures to authenticate API requests. The HTTP Signatures sent with each request are similar to the signatures used by the Amazon Web Services REST API. To help with the request-signing process, we have provided an example bash script. You must be root, or have permissions to access the contents of the /opt/jc directory to generate a signature.

Here is a breakdown of the example script, with explanations.

The first thing the script does is extract the systemKey from the JSON formatted /opt/jc/jcagent.conf file.

#!/bin/bash
conf="`cat /opt/jc/jcagent.conf`"
regex="systemKey\":\"(\w+)\""
if [[ $conf =~ $regex ]] ; then
systemKey="${BASH_REMATCH[1]}"
fi

Then the script retrieves the current date in the correct format.

now=`date -u "+%a, %d %h %Y %H:%M:%S GMT"`;

Next we build a signing string to demonstrate the expected signature format. The signed string must consist of the request-line and the date header, separated by a newline character.

signstr="GET /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"

The next step is to calculate and apply the signature. This is a two-step process:

  1. Create a signature from the signing string using the JumpCloud Agent private key: printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key
  2. Then Base64-encode the signature string and trim off the newline characters: | openssl enc -e -a | tr -d '\n'

The combined steps above result in:

signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;

Finally, we make sure the API call sending the signature has the same Authorization header and Date header values that were used in the signing string. This example API request simply requests the entire system record.

curl -iq \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Input data

All PUT methods should use the HTTP Content-Type header with a value of 'application/json'. PUT methods are used for updating a record.

The following example demonstrates how to update the displayName of the system.

signstr="PUT /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"
signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;
curl -iq \
-d "{\"displayName\" : \"updated-system-name-1\"}" \
-X "PUT" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Output data

All results will be formatted as JSON.

Here is an abbreviated example of response output:

{
"__v": 0,
"_id": "525ee96f52e144993e000015",
"agentServer": "lappy386",
"agentVersion": "0.9.42",
"arch": "x86_64",
"connectionKey": "127.0.0.1_51812",
"displayName": "ubuntu-1204",
"firstContact": "2013-10-16T19:30:55.611Z",
"hostname": "ubuntu-1204" ...

Additional Examples

Signing authentication example

This example demonstrates how to make an authenticated request to the System Context API (explained previously.) The API request simply requests a fetch of the JumpCloud record for this system.

SigningExample.sh

Shutdown hook

This example demonstrates how to make requests to the API on system shutdown. Using an init.d script registered at run level 0, you can call the System Context API as the system is shutting down.

Instance-shutdown-initd is an example of an init.d script that only runs at system shutdown.

After customizing the instance-shutdown-initd script, you should install it on the system(s) running the JumpCloud agent...

  1. Copy the modified instance-shutdown-initd to /etc/init.d/instance-shutdown
  2. On Ubuntu systems, run update-rc.d instance-shutdown defaults. On RedHat/CentOS systems, run chkconfig --add instance-shutdown

Third party

Chef cookbooks

https://github.com/nshenry03/jumpcloud

https://github.com/cjs226/jumpcloud

About

System Context API

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Latest commit

History

67 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This file is no longer maintained, for the most current documention on System Context please refer to the JumpCloud API Documentation

JumpCloud System Context API

Introduction

The JumpCloud System Context API is an alternative way to authenticate with a subset of JumpCloud's REST APIs. Using this method a system can manage it's information and resource associations, allowing modern auto provisioning environments to scale as needed.

Supported Endpoints

The system context API can be used in conjunction with Systems endpoints found in the V1 API and certain System Group endpoints found in the v2 API. You can review our API documention. for more details on these endpoints.

  • A system may fetch, alter, and delete metatdata about itself, including manipulating a system's Tag and Systemuser associations,
    • /api/systems/{system_id} | GETPUT
  • A system may delete itself from your JumpCloud organization
    • /api/systems/{system_id} | DELETE
  • A system may fetch it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/memberof | GET
    • /api/v2/systems/{system_id}/associations | GET
    • /api/v2/systems/{system_id}/users | GET
  • A system may alter it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/associations | POST
  • A system may alter it's System Group associations
    • /api/v2/systemgroups/{systemgroup_id} | POST
      • NOTE If a system attempts to alter the system group membership of a different system the request will be rejected
  • Note that the Groups endpoints are documented under the V2 section of our API Documentation.
  • Note that the Systems endpoints are documented under the V1 section of our API Documentation.

Response Codes

If endpoints other than those described above are called using the System Context API the server will return a 401 response.

Authentication

To allow for secure access to the API, you must authenticate each API request. The System Context API uses HTTP Signatures to authenticate API requests. The HTTP Signatures sent with each request are similar to the signatures used by the Amazon Web Services REST API. To help with the request-signing process, we have provided an example bash script. You must be root, or have permissions to access the contents of the /opt/jc directory to generate a signature.

Here is a breakdown of the example script, with explanations.

The first thing the script does is extract the systemKey from the JSON formatted /opt/jc/jcagent.conf file.

#!/bin/bash
conf="`cat /opt/jc/jcagent.conf`"
regex="systemKey\":\"(\w+)\""
if [[ $conf =~ $regex ]] ; then
systemKey="${BASH_REMATCH[1]}"
fi

Then the script retrieves the current date in the correct format.

now=`date -u "+%a, %d %h %Y %H:%M:%S GMT"`;

Next we build a signing string to demonstrate the expected signature format. The signed string must consist of the request-line and the date header, separated by a newline character.

signstr="GET /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"

The next step is to calculate and apply the signature. This is a two-step process:

  1. Create a signature from the signing string using the JumpCloud Agent private key: printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key
  2. Then Base64-encode the signature string and trim off the newline characters: | openssl enc -e -a | tr -d '\n'

The combined steps above result in:

signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;

Finally, we make sure the API call sending the signature has the same Authorization header and Date header values that were used in the signing string. This example API request simply requests the entire system record.

curl -iq \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Input data

All PUT methods should use the HTTP Content-Type header with a value of 'application/json'. PUT methods are used for updating a record.

The following example demonstrates how to update the displayName of the system.

signstr="PUT /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"
signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;
curl -iq \
-d "{\"displayName\" : \"updated-system-name-1\"}" \
-X "PUT" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Output data

All results will be formatted as JSON.

Here is an abbreviated example of response output:

{
"__v": 0,
"_id": "525ee96f52e144993e000015",
"agentServer": "lappy386",
"agentVersion": "0.9.42",
"arch": "x86_64",
"connectionKey": "127.0.0.1_51812",
"displayName": "ubuntu-1204",
"firstContact": "2013-10-16T19:30:55.611Z",
"hostname": "ubuntu-1204" ...

Additional Examples

Signing authentication example

This example demonstrates how to make an authenticated request to the System Context API (explained previously.) The API request simply requests a fetch of the JumpCloud record for this system.

SigningExample.sh

Shutdown hook

This example demonstrates how to make requests to the API on system shutdown. Using an init.d script registered at run level 0, you can call the System Context API as the system is shutting down.

Instance-shutdown-initd is an example of an init.d script that only runs at system shutdown.

After customizing the instance-shutdown-initd script, you should install it on the system(s) running the JumpCloud agent...

  1. Copy the modified instance-shutdown-initd to /etc/init.d/instance-shutdown
  2. On Ubuntu systems, run update-rc.d instance-shutdown defaults. On RedHat/CentOS systems, run chkconfig --add instance-shutdown

Third party

Chef cookbooks

https://github.com/nshenry03/jumpcloud

https://github.com/cjs226/jumpcloud

About

System Context API

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Latest commit

History

67 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This file is no longer maintained, for the most current documention on System Context please refer to the JumpCloud API Documentation

JumpCloud System Context API

Introduction

The JumpCloud System Context API is an alternative way to authenticate with a subset of JumpCloud's REST APIs. Using this method a system can manage it's information and resource associations, allowing modern auto provisioning environments to scale as needed.

Supported Endpoints

The system context API can be used in conjunction with Systems endpoints found in the V1 API and certain System Group endpoints found in the v2 API. You can review our API documention. for more details on these endpoints.

  • A system may fetch, alter, and delete metatdata about itself, including manipulating a system's Tag and Systemuser associations,
    • /api/systems/{system_id} | GETPUT
  • A system may delete itself from your JumpCloud organization
    • /api/systems/{system_id} | DELETE
  • A system may fetch it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/memberof | GET
    • /api/v2/systems/{system_id}/associations | GET
    • /api/v2/systems/{system_id}/users | GET
  • A system may alter it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/associations | POST
  • A system may alter it's System Group associations
    • /api/v2/systemgroups/{systemgroup_id} | POST
      • NOTE If a system attempts to alter the system group membership of a different system the request will be rejected
  • Note that the Groups endpoints are documented under the V2 section of our API Documentation.
  • Note that the Systems endpoints are documented under the V1 section of our API Documentation.

Response Codes

If endpoints other than those described above are called using the System Context API the server will return a 401 response.

Authentication

To allow for secure access to the API, you must authenticate each API request. The System Context API uses HTTP Signatures to authenticate API requests. The HTTP Signatures sent with each request are similar to the signatures used by the Amazon Web Services REST API. To help with the request-signing process, we have provided an example bash script. You must be root, or have permissions to access the contents of the /opt/jc directory to generate a signature.

Here is a breakdown of the example script, with explanations.

The first thing the script does is extract the systemKey from the JSON formatted /opt/jc/jcagent.conf file.

#!/bin/bash
conf="`cat /opt/jc/jcagent.conf`"
regex="systemKey\":\"(\w+)\""
if [[ $conf =~ $regex ]] ; then
systemKey="${BASH_REMATCH[1]}"
fi

Then the script retrieves the current date in the correct format.

now=`date -u "+%a, %d %h %Y %H:%M:%S GMT"`;

Next we build a signing string to demonstrate the expected signature format. The signed string must consist of the request-line and the date header, separated by a newline character.

signstr="GET /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"

The next step is to calculate and apply the signature. This is a two-step process:

  1. Create a signature from the signing string using the JumpCloud Agent private key: printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key
  2. Then Base64-encode the signature string and trim off the newline characters: | openssl enc -e -a | tr -d '\n'

The combined steps above result in:

signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;

Finally, we make sure the API call sending the signature has the same Authorization header and Date header values that were used in the signing string. This example API request simply requests the entire system record.

curl -iq \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Input data

All PUT methods should use the HTTP Content-Type header with a value of 'application/json'. PUT methods are used for updating a record.

The following example demonstrates how to update the displayName of the system.

signstr="PUT /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"
signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;
curl -iq \
-d "{\"displayName\" : \"updated-system-name-1\"}" \
-X "PUT" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Output data

All results will be formatted as JSON.

Here is an abbreviated example of response output:

{
"__v": 0,
"_id": "525ee96f52e144993e000015",
"agentServer": "lappy386",
"agentVersion": "0.9.42",
"arch": "x86_64",
"connectionKey": "127.0.0.1_51812",
"displayName": "ubuntu-1204",
"firstContact": "2013-10-16T19:30:55.611Z",
"hostname": "ubuntu-1204" ...

Additional Examples

Signing authentication example

This example demonstrates how to make an authenticated request to the System Context API (explained previously.) The API request simply requests a fetch of the JumpCloud record for this system.

SigningExample.sh

Shutdown hook

This example demonstrates how to make requests to the API on system shutdown. Using an init.d script registered at run level 0, you can call the System Context API as the system is shutting down.

Instance-shutdown-initd is an example of an init.d script that only runs at system shutdown.

After customizing the instance-shutdown-initd script, you should install it on the system(s) running the JumpCloud agent...

  1. Copy the modified instance-shutdown-initd to /etc/init.d/instance-shutdown
  2. On Ubuntu systems, run update-rc.d instance-shutdown defaults. On RedHat/CentOS systems, run chkconfig --add instance-shutdown

Third party

Chef cookbooks

https://github.com/nshenry03/jumpcloud

https://github.com/cjs226/jumpcloud

About

System Context API

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Latest commit

History

67 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This file is no longer maintained, for the most current documention on System Context please refer to the JumpCloud API Documentation

JumpCloud System Context API

Introduction

The JumpCloud System Context API is an alternative way to authenticate with a subset of JumpCloud's REST APIs. Using this method a system can manage it's information and resource associations, allowing modern auto provisioning environments to scale as needed.

Supported Endpoints

The system context API can be used in conjunction with Systems endpoints found in the V1 API and certain System Group endpoints found in the v2 API. You can review our API documention. for more details on these endpoints.

  • A system may fetch, alter, and delete metatdata about itself, including manipulating a system's Tag and Systemuser associations,
    • /api/systems/{system_id} | GETPUT
  • A system may delete itself from your JumpCloud organization
    • /api/systems/{system_id} | DELETE
  • A system may fetch it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/memberof | GET
    • /api/v2/systems/{system_id}/associations | GET
    • /api/v2/systems/{system_id}/users | GET
  • A system may alter it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/associations | POST
  • A system may alter it's System Group associations
    • /api/v2/systemgroups/{systemgroup_id} | POST
      • NOTE If a system attempts to alter the system group membership of a different system the request will be rejected
  • Note that the Groups endpoints are documented under the V2 section of our API Documentation.
  • Note that the Systems endpoints are documented under the V1 section of our API Documentation.

Response Codes

If endpoints other than those described above are called using the System Context API the server will return a 401 response.

Authentication

To allow for secure access to the API, you must authenticate each API request. The System Context API uses HTTP Signatures to authenticate API requests. The HTTP Signatures sent with each request are similar to the signatures used by the Amazon Web Services REST API. To help with the request-signing process, we have provided an example bash script. You must be root, or have permissions to access the contents of the /opt/jc directory to generate a signature.

Here is a breakdown of the example script, with explanations.

The first thing the script does is extract the systemKey from the JSON formatted /opt/jc/jcagent.conf file.

#!/bin/bash
conf="`cat /opt/jc/jcagent.conf`"
regex="systemKey\":\"(\w+)\""
if [[ $conf =~ $regex ]] ; then
systemKey="${BASH_REMATCH[1]}"
fi

Then the script retrieves the current date in the correct format.

now=`date -u "+%a, %d %h %Y %H:%M:%S GMT"`;

Next we build a signing string to demonstrate the expected signature format. The signed string must consist of the request-line and the date header, separated by a newline character.

signstr="GET /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"

The next step is to calculate and apply the signature. This is a two-step process:

  1. Create a signature from the signing string using the JumpCloud Agent private key: printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key
  2. Then Base64-encode the signature string and trim off the newline characters: | openssl enc -e -a | tr -d '\n'

The combined steps above result in:

signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;

Finally, we make sure the API call sending the signature has the same Authorization header and Date header values that were used in the signing string. This example API request simply requests the entire system record.

curl -iq \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Input data

All PUT methods should use the HTTP Content-Type header with a value of 'application/json'. PUT methods are used for updating a record.

The following example demonstrates how to update the displayName of the system.

signstr="PUT /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"
signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;
curl -iq \
-d "{\"displayName\" : \"updated-system-name-1\"}" \
-X "PUT" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Output data

All results will be formatted as JSON.

Here is an abbreviated example of response output:

{
"__v": 0,
"_id": "525ee96f52e144993e000015",
"agentServer": "lappy386",
"agentVersion": "0.9.42",
"arch": "x86_64",
"connectionKey": "127.0.0.1_51812",
"displayName": "ubuntu-1204",
"firstContact": "2013-10-16T19:30:55.611Z",
"hostname": "ubuntu-1204" ...

Additional Examples

Signing authentication example

This example demonstrates how to make an authenticated request to the System Context API (explained previously.) The API request simply requests a fetch of the JumpCloud record for this system.

SigningExample.sh

Shutdown hook

This example demonstrates how to make requests to the API on system shutdown. Using an init.d script registered at run level 0, you can call the System Context API as the system is shutting down.

Instance-shutdown-initd is an example of an init.d script that only runs at system shutdown.

After customizing the instance-shutdown-initd script, you should install it on the system(s) running the JumpCloud agent...

  1. Copy the modified instance-shutdown-initd to /etc/init.d/instance-shutdown
  2. On Ubuntu systems, run update-rc.d instance-shutdown defaults. On RedHat/CentOS systems, run chkconfig --add instance-shutdown

Third party

Chef cookbooks

https://github.com/nshenry03/jumpcloud

https://github.com/cjs226/jumpcloud

About

System Context API

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Latest commit

History

67 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This file is no longer maintained, for the most current documention on System Context please refer to the JumpCloud API Documentation

JumpCloud System Context API

Introduction

The JumpCloud System Context API is an alternative way to authenticate with a subset of JumpCloud's REST APIs. Using this method a system can manage it's information and resource associations, allowing modern auto provisioning environments to scale as needed.

Supported Endpoints

The system context API can be used in conjunction with Systems endpoints found in the V1 API and certain System Group endpoints found in the v2 API. You can review our API documention. for more details on these endpoints.

  • A system may fetch, alter, and delete metatdata about itself, including manipulating a system's Tag and Systemuser associations,
    • /api/systems/{system_id} | GETPUT
  • A system may delete itself from your JumpCloud organization
    • /api/systems/{system_id} | DELETE
  • A system may fetch it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/memberof | GET
    • /api/v2/systems/{system_id}/associations | GET
    • /api/v2/systems/{system_id}/users | GET
  • A system may alter it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/associations | POST
  • A system may alter it's System Group associations
    • /api/v2/systemgroups/{systemgroup_id} | POST
      • NOTE If a system attempts to alter the system group membership of a different system the request will be rejected
  • Note that the Groups endpoints are documented under the V2 section of our API Documentation.
  • Note that the Systems endpoints are documented under the V1 section of our API Documentation.

Response Codes

If endpoints other than those described above are called using the System Context API the server will return a 401 response.

Authentication

To allow for secure access to the API, you must authenticate each API request. The System Context API uses HTTP Signatures to authenticate API requests. The HTTP Signatures sent with each request are similar to the signatures used by the Amazon Web Services REST API. To help with the request-signing process, we have provided an example bash script. You must be root, or have permissions to access the contents of the /opt/jc directory to generate a signature.

Here is a breakdown of the example script, with explanations.

The first thing the script does is extract the systemKey from the JSON formatted /opt/jc/jcagent.conf file.

#!/bin/bash
conf="`cat /opt/jc/jcagent.conf`"
regex="systemKey\":\"(\w+)\""
if [[ $conf =~ $regex ]] ; then
systemKey="${BASH_REMATCH[1]}"
fi

Then the script retrieves the current date in the correct format.

now=`date -u "+%a, %d %h %Y %H:%M:%S GMT"`;

Next we build a signing string to demonstrate the expected signature format. The signed string must consist of the request-line and the date header, separated by a newline character.

signstr="GET /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"

The next step is to calculate and apply the signature. This is a two-step process:

  1. Create a signature from the signing string using the JumpCloud Agent private key: printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key
  2. Then Base64-encode the signature string and trim off the newline characters: | openssl enc -e -a | tr -d '\n'

The combined steps above result in:

signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;

Finally, we make sure the API call sending the signature has the same Authorization header and Date header values that were used in the signing string. This example API request simply requests the entire system record.

curl -iq \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Input data

All PUT methods should use the HTTP Content-Type header with a value of 'application/json'. PUT methods are used for updating a record.

The following example demonstrates how to update the displayName of the system.

signstr="PUT /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"
signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;
curl -iq \
-d "{\"displayName\" : \"updated-system-name-1\"}" \
-X "PUT" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Output data

All results will be formatted as JSON.

Here is an abbreviated example of response output:

{
"__v": 0,
"_id": "525ee96f52e144993e000015",
"agentServer": "lappy386",
"agentVersion": "0.9.42",
"arch": "x86_64",
"connectionKey": "127.0.0.1_51812",
"displayName": "ubuntu-1204",
"firstContact": "2013-10-16T19:30:55.611Z",
"hostname": "ubuntu-1204" ...

Additional Examples

Signing authentication example

This example demonstrates how to make an authenticated request to the System Context API (explained previously.) The API request simply requests a fetch of the JumpCloud record for this system.

SigningExample.sh

Shutdown hook

This example demonstrates how to make requests to the API on system shutdown. Using an init.d script registered at run level 0, you can call the System Context API as the system is shutting down.

Instance-shutdown-initd is an example of an init.d script that only runs at system shutdown.

After customizing the instance-shutdown-initd script, you should install it on the system(s) running the JumpCloud agent...

  1. Copy the modified instance-shutdown-initd to /etc/init.d/instance-shutdown
  2. On Ubuntu systems, run update-rc.d instance-shutdown defaults. On RedHat/CentOS systems, run chkconfig --add instance-shutdown

Third party

Chef cookbooks

https://github.com/nshenry03/jumpcloud

https://github.com/cjs226/jumpcloud

About

System Context API

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Latest commit

History

67 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This file is no longer maintained, for the most current documention on System Context please refer to the JumpCloud API Documentation

JumpCloud System Context API

Introduction

The JumpCloud System Context API is an alternative way to authenticate with a subset of JumpCloud's REST APIs. Using this method a system can manage it's information and resource associations, allowing modern auto provisioning environments to scale as needed.

Supported Endpoints

The system context API can be used in conjunction with Systems endpoints found in the V1 API and certain System Group endpoints found in the v2 API. You can review our API documention. for more details on these endpoints.

  • A system may fetch, alter, and delete metatdata about itself, including manipulating a system's Tag and Systemuser associations,
    • /api/systems/{system_id} | GETPUT
  • A system may delete itself from your JumpCloud organization
    • /api/systems/{system_id} | DELETE
  • A system may fetch it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/memberof | GET
    • /api/v2/systems/{system_id}/associations | GET
    • /api/v2/systems/{system_id}/users | GET
  • A system may alter it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/associations | POST
  • A system may alter it's System Group associations
    • /api/v2/systemgroups/{systemgroup_id} | POST
      • NOTE If a system attempts to alter the system group membership of a different system the request will be rejected
  • Note that the Groups endpoints are documented under the V2 section of our API Documentation.
  • Note that the Systems endpoints are documented under the V1 section of our API Documentation.

Response Codes

If endpoints other than those described above are called using the System Context API the server will return a 401 response.

Authentication

To allow for secure access to the API, you must authenticate each API request. The System Context API uses HTTP Signatures to authenticate API requests. The HTTP Signatures sent with each request are similar to the signatures used by the Amazon Web Services REST API. To help with the request-signing process, we have provided an example bash script. You must be root, or have permissions to access the contents of the /opt/jc directory to generate a signature.

Here is a breakdown of the example script, with explanations.

The first thing the script does is extract the systemKey from the JSON formatted /opt/jc/jcagent.conf file.

#!/bin/bash
conf="`cat /opt/jc/jcagent.conf`"
regex="systemKey\":\"(\w+)\""
if [[ $conf =~ $regex ]] ; then
systemKey="${BASH_REMATCH[1]}"
fi

Then the script retrieves the current date in the correct format.

now=`date -u "+%a, %d %h %Y %H:%M:%S GMT"`;

Next we build a signing string to demonstrate the expected signature format. The signed string must consist of the request-line and the date header, separated by a newline character.

signstr="GET /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"

The next step is to calculate and apply the signature. This is a two-step process:

  1. Create a signature from the signing string using the JumpCloud Agent private key: printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key
  2. Then Base64-encode the signature string and trim off the newline characters: | openssl enc -e -a | tr -d '\n'

The combined steps above result in:

signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;

Finally, we make sure the API call sending the signature has the same Authorization header and Date header values that were used in the signing string. This example API request simply requests the entire system record.

curl -iq \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Input data

All PUT methods should use the HTTP Content-Type header with a value of 'application/json'. PUT methods are used for updating a record.

The following example demonstrates how to update the displayName of the system.

signstr="PUT /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"
signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;
curl -iq \
-d "{\"displayName\" : \"updated-system-name-1\"}" \
-X "PUT" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Output data

All results will be formatted as JSON.

Here is an abbreviated example of response output:

{
"__v": 0,
"_id": "525ee96f52e144993e000015",
"agentServer": "lappy386",
"agentVersion": "0.9.42",
"arch": "x86_64",
"connectionKey": "127.0.0.1_51812",
"displayName": "ubuntu-1204",
"firstContact": "2013-10-16T19:30:55.611Z",
"hostname": "ubuntu-1204" ...

Additional Examples

Signing authentication example

This example demonstrates how to make an authenticated request to the System Context API (explained previously.) The API request simply requests a fetch of the JumpCloud record for this system.

SigningExample.sh

Shutdown hook

This example demonstrates how to make requests to the API on system shutdown. Using an init.d script registered at run level 0, you can call the System Context API as the system is shutting down.

Instance-shutdown-initd is an example of an init.d script that only runs at system shutdown.

After customizing the instance-shutdown-initd script, you should install it on the system(s) running the JumpCloud agent...

  1. Copy the modified instance-shutdown-initd to /etc/init.d/instance-shutdown
  2. On Ubuntu systems, run update-rc.d instance-shutdown defaults. On RedHat/CentOS systems, run chkconfig --add instance-shutdown

Third party

Chef cookbooks

https://github.com/nshenry03/jumpcloud

https://github.com/cjs226/jumpcloud

About

System Context API

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Latest commit

History

67 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This file is no longer maintained, for the most current documention on System Context please refer to the JumpCloud API Documentation

JumpCloud System Context API

Introduction

The JumpCloud System Context API is an alternative way to authenticate with a subset of JumpCloud's REST APIs. Using this method a system can manage it's information and resource associations, allowing modern auto provisioning environments to scale as needed.

Supported Endpoints

The system context API can be used in conjunction with Systems endpoints found in the V1 API and certain System Group endpoints found in the v2 API. You can review our API documention. for more details on these endpoints.

  • A system may fetch, alter, and delete metatdata about itself, including manipulating a system's Tag and Systemuser associations,
    • /api/systems/{system_id} | GETPUT
  • A system may delete itself from your JumpCloud organization
    • /api/systems/{system_id} | DELETE
  • A system may fetch it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/memberof | GET
    • /api/v2/systems/{system_id}/associations | GET
    • /api/v2/systems/{system_id}/users | GET
  • A system may alter it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/associations | POST
  • A system may alter it's System Group associations
    • /api/v2/systemgroups/{systemgroup_id} | POST
      • NOTE If a system attempts to alter the system group membership of a different system the request will be rejected
  • Note that the Groups endpoints are documented under the V2 section of our API Documentation.
  • Note that the Systems endpoints are documented under the V1 section of our API Documentation.

Response Codes

If endpoints other than those described above are called using the System Context API the server will return a 401 response.

Authentication

To allow for secure access to the API, you must authenticate each API request. The System Context API uses HTTP Signatures to authenticate API requests. The HTTP Signatures sent with each request are similar to the signatures used by the Amazon Web Services REST API. To help with the request-signing process, we have provided an example bash script. You must be root, or have permissions to access the contents of the /opt/jc directory to generate a signature.

Here is a breakdown of the example script, with explanations.

The first thing the script does is extract the systemKey from the JSON formatted /opt/jc/jcagent.conf file.

#!/bin/bash
conf="`cat /opt/jc/jcagent.conf`"
regex="systemKey\":\"(\w+)\""
if [[ $conf =~ $regex ]] ; then
systemKey="${BASH_REMATCH[1]}"
fi

Then the script retrieves the current date in the correct format.

now=`date -u "+%a, %d %h %Y %H:%M:%S GMT"`;

Next we build a signing string to demonstrate the expected signature format. The signed string must consist of the request-line and the date header, separated by a newline character.

signstr="GET /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"

The next step is to calculate and apply the signature. This is a two-step process:

  1. Create a signature from the signing string using the JumpCloud Agent private key: printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key
  2. Then Base64-encode the signature string and trim off the newline characters: | openssl enc -e -a | tr -d '\n'

The combined steps above result in:

signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;

Finally, we make sure the API call sending the signature has the same Authorization header and Date header values that were used in the signing string. This example API request simply requests the entire system record.

curl -iq \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Input data

All PUT methods should use the HTTP Content-Type header with a value of 'application/json'. PUT methods are used for updating a record.

The following example demonstrates how to update the displayName of the system.

signstr="PUT /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"
signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;
curl -iq \
-d "{\"displayName\" : \"updated-system-name-1\"}" \
-X "PUT" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Output data

All results will be formatted as JSON.

Here is an abbreviated example of response output:

{
"__v": 0,
"_id": "525ee96f52e144993e000015",
"agentServer": "lappy386",
"agentVersion": "0.9.42",
"arch": "x86_64",
"connectionKey": "127.0.0.1_51812",
"displayName": "ubuntu-1204",
"firstContact": "2013-10-16T19:30:55.611Z",
"hostname": "ubuntu-1204" ...

Additional Examples

Signing authentication example

This example demonstrates how to make an authenticated request to the System Context API (explained previously.) The API request simply requests a fetch of the JumpCloud record for this system.

SigningExample.sh

Shutdown hook

This example demonstrates how to make requests to the API on system shutdown. Using an init.d script registered at run level 0, you can call the System Context API as the system is shutting down.

Instance-shutdown-initd is an example of an init.d script that only runs at system shutdown.

After customizing the instance-shutdown-initd script, you should install it on the system(s) running the JumpCloud agent...

  1. Copy the modified instance-shutdown-initd to /etc/init.d/instance-shutdown
  2. On Ubuntu systems, run update-rc.d instance-shutdown defaults. On RedHat/CentOS systems, run chkconfig --add instance-shutdown

Third party

Chef cookbooks

https://github.com/nshenry03/jumpcloud

https://github.com/cjs226/jumpcloud

About

System Context API

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Jul 19, 2019. It is now read-only.

Latest commit

History

67 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

This file is no longer maintained, for the most current documention on System Context please refer to the JumpCloud API Documentation

JumpCloud System Context API

Introduction

The JumpCloud System Context API is an alternative way to authenticate with a subset of JumpCloud's REST APIs. Using this method a system can manage it's information and resource associations, allowing modern auto provisioning environments to scale as needed.

Supported Endpoints

The system context API can be used in conjunction with Systems endpoints found in the V1 API and certain System Group endpoints found in the v2 API. You can review our API documention. for more details on these endpoints.

  • A system may fetch, alter, and delete metatdata about itself, including manipulating a system's Tag and Systemuser associations,
    • /api/systems/{system_id} | GETPUT
  • A system may delete itself from your JumpCloud organization
    • /api/systems/{system_id} | DELETE
  • A system may fetch it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/memberof | GET
    • /api/v2/systems/{system_id}/associations | GET
    • /api/v2/systems/{system_id}/users | GET
  • A system may alter it's direct resource assocations under v2 (Groups)
    • /api/v2/systems/{system_id}/associations | POST
  • A system may alter it's System Group associations
    • /api/v2/systemgroups/{systemgroup_id} | POST
      • NOTE If a system attempts to alter the system group membership of a different system the request will be rejected
  • Note that the Groups endpoints are documented under the V2 section of our API Documentation.
  • Note that the Systems endpoints are documented under the V1 section of our API Documentation.

Response Codes

If endpoints other than those described above are called using the System Context API the server will return a 401 response.

Authentication

To allow for secure access to the API, you must authenticate each API request. The System Context API uses HTTP Signatures to authenticate API requests. The HTTP Signatures sent with each request are similar to the signatures used by the Amazon Web Services REST API. To help with the request-signing process, we have provided an example bash script. You must be root, or have permissions to access the contents of the /opt/jc directory to generate a signature.

Here is a breakdown of the example script, with explanations.

The first thing the script does is extract the systemKey from the JSON formatted /opt/jc/jcagent.conf file.

#!/bin/bash
conf="`cat /opt/jc/jcagent.conf`"
regex="systemKey\":\"(\w+)\""
if [[ $conf =~ $regex ]] ; then
systemKey="${BASH_REMATCH[1]}"
fi

Then the script retrieves the current date in the correct format.

now=`date -u "+%a, %d %h %Y %H:%M:%S GMT"`;

Next we build a signing string to demonstrate the expected signature format. The signed string must consist of the request-line and the date header, separated by a newline character.

signstr="GET /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"

The next step is to calculate and apply the signature. This is a two-step process:

  1. Create a signature from the signing string using the JumpCloud Agent private key: printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key
  2. Then Base64-encode the signature string and trim off the newline characters: | openssl enc -e -a | tr -d '\n'

The combined steps above result in:

signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;

Finally, we make sure the API call sending the signature has the same Authorization header and Date header values that were used in the signing string. This example API request simply requests the entire system record.

curl -iq \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Input data

All PUT methods should use the HTTP Content-Type header with a value of 'application/json'. PUT methods are used for updating a record.

The following example demonstrates how to update the displayName of the system.

signstr="PUT /api/systems/${systemKey} HTTP/1.1\ndate: ${now}"
signature=`printf "$signstr" | openssl dgst -sha256 -sign /opt/jc/client.key | openssl enc -e -a | tr -d '\n'` ;
curl -iq \
-d "{\"displayName\" : \"updated-system-name-1\"}" \
-X "PUT" \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Date: ${now}" \
-H "Authorization: Signature keyId=\"system/${systemKey}\",headers=\"request-line date\",algorithm=\"rsa-sha256\",signature=\"${signature}\"" \
--url https://console.jumpcloud.com/api/systems/${systemKey}

Output data

All results will be formatted as JSON.

Here is an abbreviated example of response output:

{
"__v": 0,
"_id": "525ee96f52e144993e000015",
"agentServer": "lappy386",
"agentVersion": "0.9.42",
"arch": "x86_64",
"connectionKey": "127.0.0.1_51812",
"displayName": "ubuntu-1204",
"firstContact": "2013-10-16T19:30:55.611Z",
"hostname": "ubuntu-1204" ...

Additional Examples

Signing authentication example

This example demonstrates how to make an authenticated request to the System Context API (explained previously.) The API request simply requests a fetch of the JumpCloud record for this system.

SigningExample.sh

Shutdown hook

This example demonstrates how to make requests to the API on system shutdown. Using an init.d script registered at run level 0, you can call the System Context API as the system is shutting down.

Instance-shutdown-initd is an example of an init.d script that only runs at system shutdown.

After customizing the instance-shutdown-initd script, you should install it on the system(s) running the JumpCloud agent...

  1. Copy the modified instance-shutdown-initd to /etc/init.d/instance-shutdown
  2. On Ubuntu systems, run update-rc.d instance-shutdown defaults. On RedHat/CentOS systems, run chkconfig --add instance-shutdown

Third party

Chef cookbooks

https://github.com/nshenry03/jumpcloud

https://github.com/cjs226/jumpcloud

About

System Context API

Resources

Stars

5 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors