Create
Examples in this documentation depend on features activated in the The code samples demonstrate how to contact the server over HTTPS using the deployment CA certificate. Before trying the samples, generate the CA certificate in PEM format from the server deployment ID and password:
|
Before creating a resource, you can get its JSON schema if you know its LDAP object classes.
Create (HTTP PUT)
Use HTTP PUT with the headers Content-Type: application/json
and If-None-Match: *
.
The payload is the JSON resource:
-
Curl
-
JavaScript
-
Python
-
Ruby
$ curl \
--request PUT \
--cacert ca-cert.pem \
--user dc=com/dc=example/ou=People/uid=kvaughan:bribery \
--header 'Content-Type: application/json' \
--header 'If-None-Match: *' \
--data '{
"_id" : "dc=com/dc=example/ou=People/uid=newuser",
"objectClass" : [ "person", "inetOrgPerson", "organizationalPerson", "top" ],
"cn" : [ "New User" ],
"givenName" : [ "New" ],
"mail" : [ "newuser@example.com" ],
"manager" : [ "dc=com/dc=example/ou=People/uid=bjensen" ],
"sn" : [ "User" ],
"telephoneNumber" : [ "+1 408 555 1212" ],
"uid" : [ "newuser" ]
}' \
'https://localhost:8443/hdap/dc=com/dc=example/ou=People/uid=newuser?_prettyPrint=true'
{
"_id" : "dc=com/dc=example/ou=People/uid=newuser",
"objectClass" : [ "person", "inetOrgPerson", "organizationalPerson", "top" ],
"cn" : [ "New User" ],
"givenName" : [ "New" ],
"mail" : [ "newuser@example.com" ],
"manager" : [ "dc=com/dc=example/ou=People/uid=bjensen" ],
"sn" : [ "User" ],
"telephoneNumber" : [ "+1 408 555 1212" ],
"uid" : [ "newuser" ]
}
(async () => {
const { authenticate, doRequest, getOptions } = require('./utils')
const options = getOptions({
path: '/hdap/dc=com/dc=example/ou=People/uid=newuser',
method: 'PUT',
body: {
"_id": "dc=com/dc=example/ou=People/uid=newuser",
"objectClass": ["person", "inetOrgPerson", "organizationalPerson", "top"],
"cn": ["New User"],
"givenName": ["New"],
"mail": ["newuser@example.com"],
"manager": ["dc=com/dc=example/ou=People/uid=bjensen"],
"sn": ["User"],
"telephoneNumber": ["+1 408 555 1212"],
"uid": ["newuser"]
}
})
const jwt = await authenticate(options)
options.headers['Authorization'] = 'Bearer ' + jwt
options.headers['If-None-Match'] = '*'
const response = await doRequest('HDAP: create with PUT', options)
console.log(response)
})().catch(error => { console.error(error) })
#!/usr/bin/env python3
import requests
import utils
body = {
'_id': 'dc=com/dc=example/ou=People/uid=newuser',
'objectClass': ['person', 'inetOrgPerson', 'organizationalPerson', 'top'],
'cn': ['New User'],
'givenName': ['New'],
'mail': ['newuser@example.com'],
'manager': ['dc=com/dc=example/ou=People/uid=bjensen'],
'sn': ['User'],
'telephoneNumber': ['+1 408 555 1212'],
'uid': ['newuser']
}
jwt = utils.authenticate('dc=com/dc=example/ou=People/uid=kvaughan', 'bribery')
headers = {
'Authorization': f'Bearer {jwt}',
'Content-Type': 'application/json',
'If-None-Match': '*'
}
response = requests.put(
f'https://{utils.host}:{utils.port}/hdap/dc=com/dc=example/ou=People/uid=newuser',
headers=headers,
json=body,
verify=utils.ca_pem)
print('Status code: %d\nJSON: %s' % (response.status_code, response.json()))
require_relative 'utils.rb'
require 'faraday'
require 'json'
utils = Utils.new('dc=com/dc=example/ou=People/uid=kvaughan', 'bribery')
options = { ca_file: utils.ca_pem }
jwt = utils.authenticate
hdap = Faraday.new(url: "https://#{utils.host}:#{utils.port}/hdap/", ssl: options) do |f|
f.headers['Content-Type'] = 'application/json'
f.request :authorization, 'Bearer', jwt
end
body = {
'_id' => "dc=com/dc=example/ou=People/uid=newuser",
'objectClass' => ["person", "inetOrgPerson", "organizationalPerson", "top"],
'cn' => ["New User"],
'givenName' => ["New"],
'mail' => ["newuser@example.com"],
'manager' => ["dc=com/dc=example/ou=People/uid=bjensen"],
'sn' => ["User"],
'telephoneNumber' => ["+1 408 555 1212"],
'uid' => ["newuser"]
}
response = hdap.put do |h|
h.path = 'dc=com/dc=example/ou=People/uid=newuser'
h.body = JSON.generate(body)
h.headers['If-None-Match'] = '*'
end
puts "Status code: #{response.status}\nJSON: #{response.body}"
HDAP Ruby examples require Ruby 3.2 and the faraday
and json
gems.
Create (HTTP POST)
Use HTTP POST with the header Content-Type: application/json
and, optionally, the parameter _action=create
.
The payload is the JSON resource:
-
Curl
-
JavaScript
-
Python
-
Ruby
$ curl \
--request POST \
--cacert ca-cert.pem \
--user uid=admin:password \
--header 'Content-Type: application/json' \
--data '{
"_id" : "dc=com/dc=example/ou=People/uid=newuser",
"objectClass" : [ "person", "inetOrgPerson", "organizationalPerson", "top" ],
"cn" : [ "New User" ],
"givenName" : [ "New" ],
"mail" : [ "newuser@example.com" ],
"manager" : [ "dc=com/dc=example/ou=People/uid=bjensen" ],
"sn" : [ "User" ],
"telephoneNumber" : [ "+1 408 555 1212" ],
"uid" : [ "newuser" ]
}' \
'https://localhost:8443/hdap/dc=com/dc=example/ou=People?_action=create&_prettyPrint=true'
{
"_id" : "dc=com/dc=example/ou=People/uid=newuser",
"objectClass" : [ "person", "inetOrgPerson", "organizationalPerson", "top" ],
"cn" : [ "New User" ],
"givenName" : [ "New" ],
"mail" : [ "newuser@example.com" ],
"manager" : [ "dc=com/dc=example/ou=People/uid=bjensen" ],
"sn" : [ "User" ],
"telephoneNumber" : [ "+1 408 555 1212" ],
"uid" : [ "newuser" ]
}
(async () => {
const { authenticate, doRequest, getOptions } = require('./utils')
const options = getOptions({
path: '/hdap/dc=com/dc=example/ou=People?_action=create',
method: 'POST',
body: {
"_id": "dc=com/dc=example/ou=People/uid=newuser",
"objectClass": ["person", "inetOrgPerson", "organizationalPerson", "top"],
"cn": ["New User"],
"givenName": ["New"],
"mail": ["newuser@example.com"],
"manager": ["dc=com/dc=example/ou=People/uid=bjensen"],
"sn": ["User"],
"telephoneNumber": ["+1 408 555 1212"],
"uid": ["newuser"]
}
})
const jwt = await authenticate(options)
options.headers['Authorization'] = 'Bearer ' + jwt
const response = await doRequest('HDAP: create with POST', options)
console.log(response)
})().catch(error => { console.error(error) })
Source files for this sample: create-post.js, utils.js
#!/usr/bin/env python3
import requests
import utils
body = {
'_id': 'dc=com/dc=example/ou=People/uid=newuser',
'objectClass': ['person', 'inetOrgPerson', 'organizationalPerson', 'top'],
'cn': ['New User'],
'givenName': ['New'],
'mail': ['newuser@example.com'],
'manager': ['dc=com/dc=example/ou=People/uid=bjensen'],
'sn': ['User'],
'telephoneNumber': ['+1 408 555 1212'],
'uid': ['newuser']
}
jwt = utils.authenticate('dc=com/dc=example/ou=People/uid=kvaughan', 'bribery')
headers = { 'Content-Type': 'application/json', 'Authorization': f'Bearer {jwt}' }
response = requests.post(
f'https://{utils.host}:{utils.port}/hdap/dc=com/dc=example/ou=People',
headers=headers,
json=body,
verify=utils.ca_pem)
print('Status code: %d\nJSON: %s' % (response.status_code, response.json()))
Source files for this sample: utils.py, create-post.py
require_relative 'utils.rb'
require 'faraday'
require 'json'
utils = Utils.new('dc=com/dc=example/ou=People/uid=kvaughan', 'bribery')
options = { ca_file: utils.ca_pem }
jwt = utils.authenticate
hdap = Faraday.new(url: "https://#{utils.host}:#{utils.port}/hdap/", ssl: options) do |f|
f.headers['Content-Type'] = 'application/json'
f.request :authorization, 'Bearer', jwt
end
body = {
'_id' => "dc=com/dc=example/ou=People/uid=newuser",
'objectClass' => ["person", "inetOrgPerson", "organizationalPerson", "top"],
'cn' => ["New User"],
'givenName' => ["New"],
'mail' => ["newuser@example.com"],
'manager' => ["dc=com/dc=example/ou=People/uid=bjensen"],
'sn' => ["User"],
'telephoneNumber' => ["+1 408 555 1212"],
'uid' => ["newuser"]
}
response = hdap.post do |h|
h.path = 'dc=com/dc=example/ou=People'
h.body = JSON.generate(body)
end
puts "Status code: #{response.status}\nJSON: #{response.body}"
Source files for this sample: utils.rb, create-post.rb
HDAP Ruby examples require Ruby 3.2 and the faraday
and json
gems.