# DO - Funksies

{{#include ../../../banners/hacktricks-training.md}}

## Basiese Inligting

DigitalOcean Funksies, ook bekend as "DO Funksies," is 'n serverlose rekenaarplatform wat jou toelaat om **kode uit te voer sonder om oor die onderliggende infrastruktuur te bekommer**. Met DO Funksies kan jy jou kode skryf en ontplooi as "funksies" wat **geaktiveer** kan word via **API**, **HTTP versoeke** (indien geaktiveer) of **cron**. Hierdie funksies word in 'n volledig bestuurde omgewing uitgevoer, so jy **hoef nie te bekommer** oor skaal, sekuriteit of onderhoud nie.

In DO, om 'n funksie te skep moet jy eers 'n **naamruimte** **skep** wat die **funksies sal groepeer**.\
Binne die naamruimte kan jy dan 'n funksie skep.

### Triggers

Die manier om **'n funksie via REST API te aktiveer** (altyd geaktiveer, dit is die metode wat die cli gebruik) is deur 'n versoek te aktiveer met 'n **authentikasie token** soos:
```bash
curl -X POST "https://faas-lon1-129376a7.doserverless.co/api/v1/namespaces/fn-c100c012-65bf-4040-1230-2183764b7c23/actions/functionname?blocking=true&result=true" \
-H "Content-Type: application/json" \
-H "Authorization: Basic MGU0NTczZGQtNjNiYS00MjZlLWI2YjctODk0N2MyYTA2NGQ4OkhwVEllQ2t4djNZN2x6YjJiRmFGc1FERXBySVlWa1lEbUxtRE1aRTludXA1UUNlU2VpV0ZGNjNqWnVhYVdrTFg="
```
Om te sien hoe die **`doctl`** cli-gereedskap hierdie token verkry (sodat jy dit kan repliseer), die **volgende opdrag toon die volledige netwerkspoor:**
```bash
doctl serverless connect --trace
```
**Wanneer HTTP-trigger geaktiveer is**, kan 'n webfunksie deur hierdie **HTTP-metodes GET, POST, PUT, PATCH, DELETE, HEAD en OPTIONS** aangeroep word.

> [!CAUTION]
> In DO-funksies kan **omgewing veranderlikes nie geënkripteer word** (ten tyde van hierdie skrywe).\
> Ek kon nie enige manier vind om hulle van die CLI te lees nie, maar van die konsole is dit reguit vorentoe.

**Funksies-URL's** lyk soos volg: `https://<random>.doserverless.co/api/v1/web/<namespace-id>/default/<function-name>`

### Enumerasie
```bash
# Namespace
doctl serverless namespaces list

# Functions (need to connect to a namespace)
doctl serverless connect
doctl serverless functions list
doctl serverless functions invoke <func-name>
doctl serverless functions get <func-name>

# Logs of executions
doctl serverless activations list
doctl serverless activations get <activation-id> # Get all the info about execution
doctl serverless activations logs <activation-id> # get only the logs of execution
doctl serverless activations result <activation-id> # get only the response result of execution

# I couldn't find any way to get the env variables form the CLI
```
> [!CAUTION]
> Daar **is nie 'n metadata-eindpunt** van die Functions sandkas nie.

{{#include ../../../banners/hacktricks-training.md}}
