# DO - Funkcije

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

## Osnovne informacije

DigitalOcean Functions, takođe poznate kao "DO Functions," je platforma za serverless računarstvo koja vam omogućava da **izvršavate kod bez brige o osnovnoj infrastrukturi**. Sa DO Functions, možete pisati i implementirati svoj kod kao "funkcije" koje mogu biti **pokrenute** putem **API**, **HTTP zahteva** (ako je omogućeno) ili **cron**. Ove funkcije se izvršavaju u potpuno upravljanom okruženju, tako da **ne morate brinuti** o skaliranju, bezbednosti ili održavanju.

U DO, da biste kreirali funkciju, prvo morate **napraviti namespace** koji će biti **grupisanje funkcija**.\
Unutar namespace-a možete zatim kreirati funkciju.

### Okidači

Način **pokretanja funkcije putem REST API** (uvek omogućeno, to je metoda koju koristi cli) je pokretanjem zahteva sa **tokenom za autentifikaciju** kao:
```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="
```
Da biste videli kako **`doctl`** cli alat dobija ovaj token (tako da ga možete replicirati), **sledeća komanda prikazuje kompletnu mrežnu analizu:**
```bash
doctl serverless connect --trace
```
**Kada je HTTP okidač omogućen**, web funkcija može biti pozvana putem ovih **HTTP metoda GET, POST, PUT, PATCH, DELETE, HEAD i OPTIONS**.

> [!CAUTION]
> U DO funkcijama, **promenljive okruženja ne mogu biti enkriptovane** (u vreme pisanja ovog teksta).\
> Nisam mogao da pronađem način da ih pročitam iz CLI, ali iz konzole je jednostavno.

**URL-ovi funkcija** izgledaju ovako: `https://<random>.doserverless.co/api/v1/web/<namespace-id>/default/<function-name>`

### Enumeracija
```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]
> Ne **postoji metadata endpoint** iz Functions sandbox-a.

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