Ga naar hoofdinhoud

Ontwikkelen aan OpenApi

Benodigdheden:

  • mongodb (choco install mongodb)
  • mongodb-shell (choco install mongodb-shell)

Lokale SQL Database

  1. Maak connectie met localhost\SQLEXPRESS.
  2. Maak een nieuwe database aan.
  3. Voer de volgende scripts uit:
  • iproxfun.sql
  • iproxdb.sql
  • iproxdb.init.sql
  • iproxvw.sql

Lokale MongoDB

Als eerder al een MongoDB was geinstalleerd (als Windows service) zonder replicaSet, verwijder dan de service: mongod --remove

Setup (als Windows Service)

  1. Installeer MongoDB
  2. Voeg C:\Program Files\MongoDB\Server\{versie}\bin toe aan de path van de environment variables van het systeem.
  3. In C:\Program Files\MongoDB\Server\{versie}\bin zit een mongod.cfg, deze moet tenminste een replSetName, dbPath en systemLog/path bevatten. Voorbeeld
# mongod.conf

storage:
dbPath: C:\ProgramData\MongoDB\data\db
journal:
enabled: true

replication:
replSetName: rs0

systemLog:
destination: file
logAppend: true
path: C:\ProgramData\MongoDB\log\mongo.log

net:
port: 27017
bindIp: 127.0.0.1
  1. open in hetzelfde path (die \bin folder) een (elevated) powershell
  2. installatie als Windows Service: voer het commando uit mongod --config "C:\Program Files\MongoDB\Server\{versie}\bin\mongod.cfg" --serviceName MongoDB --serviceDisplayName MongoDB --install
  3. starten Windows Service: voer het commando uit net start MongoDB
  4. open een nieuwe (elevated) powershell
  5. voer het commando uit: mongosh
  6. Voer het volgende script uit: rs.initiate({_id: "rs0", version: 1, members: [{_id: 0, host: "localhost:27017"}]})
  7. Maak een nieuwe database aan: use [mongodb-name] (bv. use iprox-openapi)
  8. Draai de initiatie scripts: load("/pad-naar-repo-van/iprox.cms/src/db/mongo/iprox_index.js") en load("/pad-naar-repo-van/iprox.cms/src/db/mongo/iprox_vw.js")

Configuratie lokaal CMS

  1. Zorg dat tenminste de volgende settings zijn toegevoegd aan settings_local.xml:
<prop name="iprox.db" value="ipmssql" />

<prop name="ipmssql.db.arch" value="mssql" level="0" />
<prop name="ipmssql.db.server" value="localhost\sqlexpress" level="0" />
<prop name="ipmssql.db.database" value="[database-name]" level="0" />

(eventueel ipmssql.db.user en ipmssql.db.pwd)

<prop name="mongo.db.connect" value="mongodb://localhost:27017/[mongodb-name]" level="0" />
  1. Als op globaler niveau (bv. in een c:\bovenliggend-path\settings.xml) hangfire is uitgeschakeld, zet dan deze weer aan (NB sinds IPCMS-1869 zou je hier ueberhaupt niet meer mee hoeven te tweaken):
<prop name="disable_hangfire" value="false" />
<prop name="disable_hangfire_backgroundjobs" value="false" />
<prop name="iprox_maintenance_enabled" value="true" />

Draaien lokaal CMS: met Rider

  1. Open de iprox solution in Rider.
  2. Hierin zijn build configuraties aangemaakt.
  3. De eerste keer maak je gebruik van Iprox.Web (full build). Daarna kan bij wijzigingen aan projecten in de solution Iprox.Web (solution build only) worden gedraaid.
  • Voor wijzigingen aan less, es6 en xsl bestanden wordt met Front-end - snippets watch (less,es6,xsl) dit in de ontwikkelserver toegepast.

Draaien lokaal CMS: met BAR

  1. bar om een build van het CMS te doen, dat dan in \deploy\ zal worden geplaatst.
  2. Met het commando bar run cms kan het cms gestart worden.

Lokaal API Genereren

De API genereren wordt gedaan met het commando bar -d api=on. Hiervoor moet wel het CMS lokaal draaien.

Om met niet-default opties te API te genereren, moet dit commando uitgebreid worden, bijvoorbeeld

bar -d 'api=on;api.authentication=Bearer'

Mogelijke opties die je hierin kunt opnemen:

  • api.authentication=Bearer
  • api.bundlesites=true
  • api.preview=true

Voor meer informatie over deze opties, zie Iprox.OpenApi.Generator

Lokaal API draaien

Het draaien van de API wordt gedaan met het commando bar run api. Voor het draaien van de API voeg je de volgende appsettings.Development.json toe aan Iprox.OpenApi.ApiServer:

{
"ConnectionStrings": {
"mongo": "mongodb://localhost:27017/[dbName]",
"ipmssql": "Data Source=localhost\\sqlexpress;Initial Catalog=[database-name];Integrated Security=true;"
},
"Logging": {
"LogLevel": {
"Default": "Debug",
"System": "Information",
"Microsoft": "Information"
}
}
}

NB om database te benaderen met user en pwd is de connection string voor ipmssql: "Data Source=localhost\\sqlexpress;Initial Catalog=[database-name];User ID=[ipmssql.db.user];Password=[ipmssql.db.pwd];TrustServerCertificate=True" of Data Source=localhost\\sqlexpress;Initial Catalog=iprox-one-acc;Integrated Security=true;Encrypt=True;TrustServerCertificate=True waarbij dus user en pwd zullen moeten overeenkomen met de waarde van die settings in het onderliggende CMS.

Authenticatie

Voor ontwikkeling aan authenticatie:

  1. Gebruik het argument --Authentication Bearer voor de generator om de api te bouwen.
  2. Genereer een secret met dotnet-script .\src\scripts\secret.csx
  3. Voeg aan appsettings.Development toe:
  "BearerAuthentication": {
"AuthenticationMfaMethod": "None" of "Email" aan de hand van of je 2fa wilt gebruiken,
"Domain": "localhost:5000",
"Secret": "[net gegenereerde secret]"
},
"Smtp": {
"Server": "mail.smtp2go.com",
"Port": "2525",
"Username": "[LastPass -> Shared-Headless -> Headless SMTP Users]",
"Password": "[LastPass -> Shared-Headless -> Headless SMTP Users]"
},
"EmailMessage": {
"FromName": "iprox",
"FromAddress": "noreply@iprox.nl"
}
  1. start de api
  2. dan zijn de volgende endpoints te vragen (check ook Authenticatie | iprox.cms )
  3. POST localhost:5000/auth/knowledge met als body:
{
"loginName": "[loginName]",
"password": "[password]"
}
  1. POST localhost:5000/auth/possession met als body:
{
"seed": "[verkregen vanuit de response van knowledge]",
"response": "[MD5 hash van secret(email) + challenge(knowledge response)]",
"knowledgeToken": "[verkregen vanuit de response van knowledge]"
}
  1. POST localhost:5000/auth/refresh met als body:
{
"refreshToken": "[refreshToken]"
}
  1. De Access Token kan dan gebruikt worden als Bearer token.