Ontwikkelen aan OpenApi
Benodigdheden:
- mongodb (
choco install mongodb) - mongodb-shell (
choco install mongodb-shell)
Lokale SQL Database
- Maak connectie met
localhost\SQLEXPRESS. - Maak een nieuwe database aan.
- 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)
- Installeer MongoDB
- Voeg
C:\Program Files\MongoDB\Server\{versie}\bintoe aan de path van de environment variables van het systeem. - In
C:\Program Files\MongoDB\Server\{versie}\binzit een mongod.cfg, deze moet tenminste eenreplSetName,dbPathensystemLog/pathbevatten. 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
- open in hetzelfde path (die
\binfolder) een (elevated) powershell - installatie als Windows Service: voer het commando uit
mongod --config "C:\Program Files\MongoDB\Server\{versie}\bin\mongod.cfg" --serviceName MongoDB --serviceDisplayName MongoDB --install - starten Windows Service: voer het commando uit
net start MongoDB - open een nieuwe (elevated) powershell
- voer het commando uit:
mongosh - Voer het volgende script uit:
rs.initiate({_id: "rs0", version: 1, members: [{_id: 0, host: "localhost:27017"}]}) - Maak een nieuwe database aan:
use [mongodb-name](bv.use iprox-openapi) - Draai de initiatie scripts:
load("/pad-naar-repo-van/iprox.cms/src/db/mongo/iprox_index.js")enload("/pad-naar-repo-van/iprox.cms/src/db/mongo/iprox_vw.js")
Configuratie lokaal CMS
- 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" />
- 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
- Open de iprox solution in Rider.
- Hierin zijn build configuraties aangemaakt.
- De eerste keer maak je gebruik van
Iprox.Web (full build). Daarna kan bij wijzigingen aan projecten in de solutionIprox.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
barom een build van het CMS te doen, dat dan in\deploy\zal worden geplaatst.- Met het commando
bar run cmskan 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=Bearerapi.bundlesites=trueapi.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:
- Gebruik het argument --Authentication Bearer voor de generator om de api te bouwen.
- Genereer een secret met
dotnet-script .\src\scripts\secret.csx - 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"
}
- start de api
- dan zijn de volgende endpoints te vragen (check ook Authenticatie | iprox.cms )
- POST localhost:5000/auth/knowledge met als body:
{
"loginName": "[loginName]",
"password": "[password]"
}
- 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]"
}
- POST localhost:5000/auth/refresh met als body:
{
"refreshToken": "[refreshToken]"
}
- De Access Token kan dan gebruikt worden als Bearer token.