Managing Authentication & Authorization
Hands-On Example (Python)¶
Preliminary Steps¶
This section contains the preliminary steps to set up the base URL and import necessary libraries.
Replace IST_SOS_ENDPOINT
in the following script with your istSOS base URL (http://localhost:8018/istsos4/v1.1 or https://istsos.org/v4/v1.1).
from datetime import datetime
import json
import requests
from IPython.display import Markdown, display
IST_SOS_ENDPOINT = "http://localhost:8018/istsos4/v1.1"
Login as viewer (Authentication)¶
username = input("Enter your username: ")
password = input("Enter your password: ")
if not username or not password:
print("Username or password is empty")
else:
data = {
"username": username,
"password": password,
"grant_type": "password",
}
response = requests.post(IST_SOS_ENDPOINT + "/Login", data=data)
if response.status_code == 200:
token = response.json()["access_token"]
print(
f"Token expires at: { datetime.fromtimestamp(response.json()['expires_in'])}"
)
prefix = username + "-"
print("Your station name will be prefixed with: " + prefix)
else:
result = json.dumps(response.json(), indent=2)
display(Markdown(f"```json\n{result}\n```"))
Retrieve data (Authorization)¶
Retrieve a Thing¶
response = requests.get(
IST_SOS_ENDPOINT + "/Things",
headers={"Authorization": f"Bearer {token}"},
)
result = json.dumps(response.json(), indent=2)
display(Markdown(f"```json\n{result}\n```"))
Create data (Authorization)¶
Create a Thing¶
thing = {
"name": f"{prefix}Lugano Lake",
"description": "The Apline Lake located in Southern Switzerland",
"properties": {
"Max depth": "288 m",
},
}
response = requests.post(
IST_SOS_ENDPOINT + "/Things",
data=json.dumps(thing),
headers={
"Content-type": "application/json",
"Authorization": f"Bearer {token}",
"Commit-message": "Create new thing",
},
)
if response.status_code == 201:
print(f"Thing created successfully ({response.headers['location']})")
else:
result = json.dumps(response.json(), indent=2)
display(Markdown(f"```json\n{result}\n```"))
Login as editor (Authentication)¶
username = input("Enter your username: ")
password = input("Enter your password: ")
if not username or not password:
print("Username or password is empty")
else:
data = {
"username": username,
"password": password,
"grant_type": "password",
}
response = requests.post(IST_SOS_ENDPOINT + "/Login", data=data)
if response.status_code == 200:
token = response.json()["access_token"]
print(
f"Token expires at: { datetime.fromtimestamp(response.json()['expires_in'])}"
)
prefix = username + "-"
else:
result = json.dumps(response.json(), indent=2)
display(Markdown(f"```json\n{result}\n```"))
Retrieve data (Authorization)¶
Retrieve the Thing¶
response = requests.get(
IST_SOS_ENDPOINT + "/Things",
headers={"Authorization": f"Bearer {token}"},
)
result = json.dumps(response.json(), indent=2)
display(Markdown(f"```json\n{result}\n```"))
Create data (Authorization)¶
Create a Thing¶
thing = {
"name": f"{prefix}Lugano Lake",
"description": "The Apline Lake located in Southern Switzerland",
"properties": {
"Max depth": "288 m",
},
}
response = requests.post(
IST_SOS_ENDPOINT + "/Things",
data=json.dumps(thing),
headers={
"Content-type": "application/json",
"Authorization": f"Bearer {token}",
"Commit-message": "Create new thing",
},
)
if response.status_code == 201:
print(f"Thing created successfully ({response.headers['location']})")
else:
result = json.dumps(response.json(), indent=2)
display(Markdown(f"```json\n{result}\n```"))