SitterIT Mobigo REST API — driftguide

Installera, sätta upp, uppdatera och avinstallera. För den som driftar servern. Ska du integrera mot API:et, läs integratörsguiden i stället.

Förutsättningar

KrävsVarför
Mobigo 7.10 på samma server Motorn laddar kundens egna Mobigo-DLL:er. Andra serier har annan uppstartssignatur — se Mobigo-version.
.NET 10 Runtime (ASP.NET Core)API:et
.NET Framework 4.7.2 Motorn. Mobigo.Core är byggd för det och kan inte laddas av moderna .NET.
SQL-åtkomst till Mobigos databas Läses ur kundens mobigo.config — lösenordet behöver aldrig skrivas i vår konfiguration.
Licens från tokens.sitterit.se Maskinbunden. Utan den svarar API:et 503.
Motorn är 32-bitars, med avsikt. Mobigos skriptmotor är MSScriptControl — 32-bitars COM som aldrig funnits i 64-bitars. Kör motorn 64-bitars fallerar varje statusändring hos en kund som har ett skript på händelsen. Mobigos egen AutoServer är byggd likadant.

Mobigo-version: du väljer inte, produkten läser

Motorn binder mot Mobigo.Core, och den ser olika ut mellan serierna. Därför finns ett motorbygge per Mobigo-serie — i dag 7.9 och 7.10. API:et finns däremot i ett enda exemplar: det rör aldrig Mobigo.Core, det pratar JSON över localhost.

Utgåvan innehåller alla motorbyggen:

C:\SitterIT\MobigoApi  SitterIT.Mobigo.Api.exe        ett bygge, alla serier
  engine\mobigo-7.9\             motor för Mobigo 7.9
  engine\mobigo-7.10\            motor för Mobigo 7.10

Vilken som gäller frågar vi inte om. Kör:

SitterIT.Mobigo.Api.exe engine "C:\inetpub\Mobigo Server\Bin\Common"

Mobigo 7.10 → motorbygget i "engine\mobigo-7.10".
engine\mobigo-7.10

Versionen läses ur kundens egen Mobigo.Core.dll, ur filens metadata utan att ladda den. Sista raden är enbart mappen, så ett installationsskript kan läsa den rakt av. Peka tjänsten på den mappen.

Och skulle fel motor ändå startas vägrar den, med besked:

Mobigo 7.9 passar inte det här bygget, som är gjort för Mobigo 7.10.
Det finns ETT BYGGE PER MOBIGO-SERIE — hämta det som matchar installationen
i adminytan. Uppstarten i Mobigo.Core har olika signatur per serie, så det
här bygget skulle falla på en MissingMethodException i stället för här.
Hittad: 7.9.2.0 i C:\inetpub\Mobigo Server\Bin\Common

Adminytan visar dessutom vilken serie som körs, och uppdateringskontrollen erbjuder bara utgåvor som matchar installationen. Tre spärrar, alla automatiska.

Vad som faktiskt skiljer sig

Motorn refererar 463 medlemmar i Mobigo.Core. Mot 7.9 saknas 10 och 33 har annan signatur — mätt, inte uppskattat. Tyngst väger att statusenumarna (TaskStatus, UserStatus, PlanDateType och tio till) flyttade från Mobigo.Core till Mobigo.Common i 7.10, och att uppstarten har olika form:

7.97.10
CoreInstance.Start (IPlatform, string, CoreOptions) (ServerConnectionSettings, IPlatform, CoreOptions)
Anonym session SessionFactoryExtensions.StartAnonymousSession(…) core.StartAnonymousSession(…)
AnvändarsessionStartSession(IUser, container) StartUserSession(IUser, token, container)
Extrafält, hela sidan lazy, en fråga per post PopulateUserProperties, en fråga per sida
Extrafältets namn utåtName Key, annars Name
total i listsvarutelämnasingår

7.7 och 7.8 har inget bygge ännu. De ligger nära 7.9 — samma motorbygge är bara nio medlemmar ifrån att passa dem också.

Installera

Två processer på samma server. API:et äger HTTP och autentisering; motorn äger Mobigo.Core och lyssnar bara på localhost.

1. Packa upp

C:\SitterIT\MobigoApi  SitterIT.Mobigo.Api.exe        ett bygge, alla Mobigo-serier
  engine\mobigo-7.9\             motorbygge för Mobigo 7.9
  engine\mobigo-7.10\            motorbygge för Mobigo 7.10

Packa upp hela utgåvan. Att bara ta med den serie kunden kör i dag är att göra nästa Mobigo-uppgradering till en nedladdning till.

2. Sätt upp bolaget — ett kommando

SitterIT.Mobigo.Api.exe setup --mobigo "C:\inetpub\Mobigo Server\Bin\Common" --tenant "Kundnamn"

Bolaget «Kundnamn» uppsatt mot Mobigo 7.10.
  motor      engine\current  (från engine\mobigo-7.10)
  port       5590
  mobigo     C:\inetpub\Mobigo Server\Bin\Common
  config     C:\inetpub\Mobigo Server

Kommandot gör allt som annars blir olika varje gång:

Kör man om kommandot behålls nyckel och port.

3. Registrera tjänsterna

sc create SitterITMobigoApi    binPath= "C:\SitterIT\MobigoApi\SitterIT.Mobigo.Api.exe" start= auto
sc create SitterITMobigoEngine binPath= "C:\SitterIT\MobigoApi\engine\current\SitterIT.Mobigo.Engine.exe" start= auto
sc start SitterITMobigoEngine
sc start SitterITMobigoApi
Tjänsten pekar på bolagets motormapp, aldrig på en serie. Pekade den på engine\mobigo-7.9 skulle en Mobigo-uppgradering kräva att tjänsten registrerades om.

Flera bolag

API:et är ett för hela installationen — en adress, en adminyta, en licens. Motorn är en per bolag: den är konfigurerad för ett bolags Bin-mapp, databas och port, och två bolag kräver därför två processer.

SitterIT.Mobigo.Api.exe setup --mobigo "…\Kund1\Bin\Common" --tenant "Kund1"
SitterIT.Mobigo.Api.exe setup --mobigo "…\Kund2\Bin\Common" --tenant "Kund2"

Varje körning lägger motorn i engine\current\<bolag> med egen port och egen motornyckel, och skriver ut vilken tjänst som ska registreras:

engine\current\Kund1\   port 5590   tjänst SitterITMobigoEngine-Kund1
engine\current\Kund2\   port 5591   tjänst SitterITMobigoEngine-Kund2
Motornyckeln är olika för varje bolag. Den är en delad hemlighet mellan API:et och en enskild motor — samma nyckel överallt hade betytt att den som fick tag i en kunds nyckel kom åt alla.

4. Licens och första nyckeln

Öppna /admin på servern, ange licensnyckeln, och skapa integrationen. Nyckeln visas en gång.

Adminytan

Allt löpande arbete görs i webbläsaren, på servern:

https://<serverns adress>/admin

Inloggningen sker med ett Mobigo-konto — API:et frågar Mobigo, inte en egen lösenordslista, och kontot måste vara systemadministratör i Mobigo. Det finns alltså inget extra lösenord att hålla reda på, och den som slutar och stängs av i Mobigo kommer inte in här heller.

I adminytanVad
Integrationer Skapa en integration, se vilka som finns, begränsa till vissa IP-adresser och återkalla. Nyckeln visas en gång, tillsammans med adress och clientId i ett block att skicka vidare
Så nås API:et HTTP eller HTTPS, port, och vilket certifikat som ska användas
Certifikat Se maskinens certifikat, välj ett — eller skapa ett nytt
Licens Registrera licensnyckeln och se status
Bolag Vilka bolag som är uppsatta, med motorport och nyckel
Version Vilken version som kör och om det finns en nyare
Senaste anrop Vem, vad, när och varifrån. Kroppen loggas aldrig
Första gången finns inget Mobigo-konto att logga in med, för inget bolag är uppsatt än. Då frågar sidan efter licensnyckeln i stället. Går licensservern inte att nå just då finns en reservkod i setup-code.txt bredvid databasfilerna.

Kommandoraden behövs inte

Installationsskriptet gör allt förstagångsarbete — bolaget, certifikatet, lyssningen och tjänsterna. Därefter räcker adminytan.

Kommandona finns kvar för två lägen där webbläsaren inte hjälper: innan något är uppsatt, och när tjänsten inte startar. De är listade under Kommandon.

HTTPS

Samma nät: inget nytt certifikat

Mobigo Server kör redan i IIS med kundens certifikat. Lägg API:et som ett program under samma site:

https://mobigo.kund.se/       → Mobigo Server   (befintlig)
https://mobigo.kund.se/api/   → SitterIT Mobigo REST API

Kräver ASP.NET Core Hosting Bundle samt URL Rewrite + ARR. Proxa till http://127.0.0.1:5080 och sätt:

{
  "Hosting": { "BehindReverseProxy": true },
  "Kestrel": { "Endpoints": { "Http": { "Url": "http://127.0.0.1:5080" } } }
}
BehindReverseProxy är av som standard och ska bara slås på när en proxy verkligen står framför. Utan proxy skulle vem som helst kunna skicka X-Forwarded-Proto: https och kringgå HTTPS-tvånget.

Eget certifikat, direkt i API:et

Kör API:et fristående — utan IIS framför — sköts certifikatet i adminytan, under Så nås API:et → Certifikat.

Har kunden redan ett? Certifikat i maskinens lagring med privat nyckel listas där. Har kunden ett i IIS för Mobigo Server syns det, och då behövs inget nytt — välj det bara.

Let's Encrypt — publikt betrott, gratis, och förnyas av sig självt. Rutan finns i adminytan så snart win-acme är på plats. Saknas den finns en knapp som hämtar och installerar den — filen kontrolleras mot en känd kontrollsumma innan något packas upp, för den körs sedan som tjänstekontot med åtkomst till certifikatlagringen. Servern behöver nå github.com; går det inte, lägg wacs.exe i mappen win-acme bredvid API:et för hand.

Sedan: ange värdnamn och e-postadress, tryck Beställ certifikat.

Ni måste bevisa att ni äger värdnamnet. Det går på tre sätt, och bara det första kräver en öppen port 80:

SättKräverNär
HTTP
knappen i adminytan
Port 80 ledig och nåbar utifrån, och att värdnamnet pekar hit Servern är ändå publik. Enklast
TLS-ALPN
--validation tls-alpn
Port 443 ledig under valideringen 443 är öppen men inte 80
DNS
--validation + leverantör
Ingen öppen port alls. Beviset läggs som en TXT-post i domänen Servern är inte nåbar utifrån. Enda sättet för wildcard

DNS-vägen har färdiga kopplingar för Cloudflare, Azure, Route53, Loopia med flera — då sätter win-acme TXT-posten själv vid varje förnyelse. Kör wacs.exe utan argument på servern; den har en meny som går igenom valen.

E-postadressen används av Let's Encrypt för att varna om ett certifikat närmar sig utgång utan att ha förnyats.

win-acme registrerar ett schemalagt jobb som förnyar var sextionde dag. Ingenting behöver göras om.

Ett förnyat certifikat är ett nytt certifikat, med nytt tumavtryck. API:et sparar därför värdnamnet bredvid tumavtrycket och slår upp certifikatet på nytt vid uppstart om det gamla är borta eller utgånget. Utan det hade HTTPS slutat fungera vid första förnyelsen — tyst, ungefär två månader efter en installation som såg ut att lyckas.

Vill ni köra det för hand, eller förstå vad knappen gör, är kommandot detta:

wacs.exe --source manual --host mobigo-api.kund.se --emailaddress [email protected] ^
         --accepttos --validation selfhosting ^
         --store certificatestore --certificatestore My --installation none

--installation none för att win-acme inte ska binda certifikatet i IIS — det är API:et som använder det, och valet görs under Certifikat.

Går inte Let's Encrypt? Är servern inte nåbar utifrån, eller är port 80 upptagen, skapar adminytan i stället ett självsignerat. Ange värdnamnet, eventuella ytterligare namn och giltighetstid. Knappen gör tre saker:

  1. Skapar ett självsignerat certifikat med 2048-bitars RSA-nyckel. Namnen hamnar i subjectAltName, inte bara i CN — ett certifikat med rätt CN men utan SAN avvisas av varje modern klient.
  2. Lägger det i maskinens certifikatlagring, och i tillitslagringen på samma maskin så serverns egna verktyg slutar varna.
  3. Ger tjänstekontot läsrätt på den privata nyckeln.
Punkt tre är den som brukar glömmas. Att certifikatet ligger i lagringen räcker inte: den privata nyckeln är en fil med egen åtkomstlista, och kör tjänsten som NETWORK SERVICE eller ett domänkonto får den inte läsa den. Felet syns som ett avbrutet TLS-handslag hos klienten, och ingenting i loggen nämner vare sig nyckel eller behörighet. Kör tjänsten som LocalSystem behövs ingen tilldelning.

Vad självsignerat inte löser: en klient som inte känner igen utfärdaren varnar. För en integration på kundens eget nät spelar det sällan roll — den som skriver integrationen kan lägga in certifikatet i sin egen tillitslagring. Ska API:et nås av utomstående över internet behövs ett certifikat från en publik utfärdare.

Utifrån: oftast eget certifikat

Mobigos värdnamn är ofta internt och certifikatet utfärdat av kundens interna CA — det litar ingen utomstående anropare på. Då behövs ett publikt värdnamn och certifikat, eller ett befintligt wildcard. Publicera bara API:et, inte hela Mobigo-siten. Motorn berörs aldrig: den binder alltid 127.0.0.1.

Licens och internet

API:et är licensierat per maskin. Licensen kontrolleras mot tokens.sitterit.se vid uppstart och därefter högst en gång per dygn.

LägeVad som händer
Licensservern svarar, licensen giltigAllt fungerar
Licensservern onåbar Senaste giltiga svaret gäller i 5 dygn. Därefter svarar /v1 med 503
Licensen ogiltig eller utgången /v1 svarar 503 direkt
Ingen licensnyckel, men ett bolag uppsatt /v1 svarar 503 tills nyckeln registreras
Ingen licensnyckel och inget bolag Installationen är under uppsättning. Adminytan går att nå
Servern behöver nå internet. Inte hela tiden — men minst en gång var femte dygn, mot tokens.sitterit.se över HTTPS. En server som är helt avskuren slutar betjäna /v1 när de fem dygnen gått. Har kunden en isolerad serverpark, säg till oss innan installationen.

Bara /v1 spärras. Adminytan och guiderna svarar även när licensen är ogiltig, så det går att rätta felet på servern.

Kontrollen går inte att koppla bort. Reservkoden släpper in i adminytan utan licensnyckel — men så snart ett bolag är uppsatt betjänar installationen en kund, och då krävs en nyckel. Tidigare kunde en installation som aldrig fick en nyckel köra obegränsat utan att någonsin fråga licensservern.

En utvecklingsinstallation som medvetet ska köra utan sätter "License": { "Required": false } i appsettings.json. Det är ett uttryckligt val i en fil på servern, inte något man hamnar i av slarv — och det finns därför inte i adminytan.

Aktiveringen är maskinbunden

Nyckeln förbrukar en plats per maskin vid första kontrollen. Flyttas installationen till en ny server, eller kopieras den, räknas det som en ny maskin — svaret blir då licensen är inte aktiverad för den här maskinen. Hör av dig så frigör vi platsen.

Kontrollera läget

SitterIT.Mobigo.Api license check

Giltig för maskin a3f19c7e. Går ut 2027-08-20.

Reservkoden

Vid uppsättningen frågar adminytan efter licensnyckeln. Går licensservern inte att nå just då finns en reservkod i setup-code.txt bredvid databasfilerna. Den släpper in dig i adminytan så att sökvägar och bolag kan sättas upp — men den ersätter inte licensen. Licensnyckeln måste registreras innan API:et börjar svara på /v1.

Integrationer och nycklar

Varje integration som ska anropa API:et behöver en egen nyckel. Den skapas här, på servern, och det är den enda platsen den går att skapa på.

SitterIT.Mobigo.Api keys create ^
    --name "Webshop" ^
    --tenant "Kundnamn" ^
    --sign "API" ^
    --scopes "tasks:read,tasks:write,customers:read"
FlaggaVad
--name Vad integrationen heter. Syns i loggen på varje anrop
--tenant Bolaget, samma namn som i setup
--sign Mobigo-signaturen integrationen arbetar som. Den styr vad anropen får göra i Mobigo, genom Mobigos egna behörigheter
--scopes Vad nyckeln får göra i API:et. Kommaseparerat

Kommandot skriver ut två saker som integratören behöver:

Integration skapad.
  Id      : f287ea5c-...        ← clientId
  ...

API-nyckel (visas bara denna gång — spara den nu):

  mk_...                        ← clientSecret
Nyckeln visas en enda gång. Den lagras bara som hash och går aldrig att läsa ut igen. Tappas den bort återkallas integrationen och en ny skapas.

Kör keys utan argument för listan över alla scopes.

Se och återkalla

SitterIT.Mobigo.Api keys list
SitterIT.Mobigo.Api keys revoke --id f287ea5c-...

Återkallning slår igenom direkt, både på nyckeln och på alla token som utfärdats med den.

Två lager av behörighet. Scopet avgör vad nyckeln får be om i API:et. Mobigo-signaturen avgör vad den får göra i Mobigo. Ett brett scope ger inte mer än vad signaturen får göra — den som ska läsa men inte skriva bör ha båda spärrarna satta.

Uppdatera

Kunden uppgraderar Mobigo

Till exempel 7.9 → 7.10. Motorn är byggd för en serie, så den måste bytas — men tjänsten ska inte röras.

sc stop SitterITMobigoEngine
SitterIT.Mobigo.Api.exe setup --mobigo "C:\inetpub\Mobigo Server\Bin\Common" --tenant "Kundnamn"

Bolaget «Kundnamn» uppsatt mot Mobigo 7.10.
  motor      engine\current  (från engine\mobigo-7.10)
  MOTORN BYTTES: 7.9 → 7.10. Starta om tjänsten SitterITMobigoEngine.

sc start SitterITMobigoEngine

Samma kommando som vid installation. Nyckel och port behålls och sökvägarna uppdateras. Raden MOTORN BYTTES visas bara när serien faktiskt ändrades.

Stoppa motorn först. En körande motor håller sina filer låsta; kommandot avbryter i så fall i stället för att lämna halva bytet gjort.

Glömmer man bytet vägrar motorn starta, med besked om vilken version som hittades och vad som krävs. Kontrollen läser Mobigos version innan den rör en Mobigo-typ.

Ny version av API:et

Adminytan söker efter utgåvor och visar bara sådana som passar kundens Mobigo-serie. Ingen automatisk uppgradering: att byta ut en körande motor mitt i kundens arbetsdag ska inte hända av sig självt.

  1. sc stop SitterITMobigoApi och sc stop SitterITMobigoEngine
  2. Packa upp den nya utgåvan över den gamla. engine\current skrivs inte över av uppackningen.
  3. Kör setup igen — det lägger den nya motorn i engine\current och behåller bolagets inställningar.
  4. Starta tjänsterna.

Databaserna med nycklar, tokens, idempotens och revisionslogg ligger kvar och läses av den nya versionen. Kolumner som tillkommit läggs till vid start.

Kommandon

Hela referensen. Kör dem från installationsmappen. Behövs sällan — adminytan täcker allt löpande arbete — men finns för de två lägen där webbläsaren inte hjälper: innan något är uppsatt, och när tjänsten inte startar.

Alla utan argument skriver ut sin egen användning.

Uppsättning

KommandoGör
setup --mobigo <Bin-mapp> --tenant <bolag> [--port <n>] Sätter upp ett bolag helt: väljer rätt motorbygge ur kundens Mobigo-version, kopierar det till engine\current, genererar motornyckeln, hittar mobigo.config och tar nästa lediga port. Körs om vid uppgradering — nyckel och port behålls
engine <Bin-mapp> Säger vilket motorbygge kundens Mobigo kräver, utan att ändra något. Sista raden är bara mappen, så ett skript kan läsa den rakt av
address Adressen integratören ska anropa, härledd ur lyssningsläget och certifikatet

Integrationer

KommandoGör
keysListar alla behörigheter som finns
keys create --name <namn> --tenant <bolag> --sign <signatur> [--scopes <...>] Skapar en integration. Skriver ut adress, clientId och nyckel i ett block att skicka vidare. --scopes utelämnat ger alla; read ger alla läsande; annars kommaseparerat
keys listAlla integrationer och deras behörigheter
keys revoke --id <id> Återkallar. Nyckeln och alla utfärdade token slutar fungera omedelbart

Lyssning och certifikat

KommandoGör
listen --mode https|http [--port <n>] [--cert <värdnamn|tumavtryck>] Väljer hur API:et nås. Certifikatet kontrolleras innan valet sparas — ett läge som pekar på ett oanvändbart certifikat gör att tjänsten vägrar starta, och då är adminytan borta med den
certs Listar maskinens certifikat med privat nyckel, och om de duger för serverauth
cert-create --host <värdnamn> [--years 3] [--also <namn,namn>] [--account <konto>] Skapar ett självsignerat certifikat, lägger det i maskinens lagring och ger tjänstekontot läsrätt på den privata nyckeln

Licens

KommandoGör
license Om licensen är giltig, när den går ut, och maskinens id

Avinstallera

  1. Återkalla integrationerna i adminytan först. Då slutar nycklarna fungera direkt, även om någon sparat undan dem.
  2. sc stop och sc delete för båda tjänsterna.
  3. Ta bort IIS-programmet eller siten, om en sådan lagts upp.
  4. Ta bort C:\SitterIT\MobigoApi\.
  5. Släpp licensens maskinplatstokens.sitterit.se/admin/licenses, annars är platsen upptagen av en server som inte finns längre.

Kundens data berörs inte. API:et skriver bara i Mobigos egen databas genom Mobigos egna regler. Det som tas bort här är våra egna filer: integrationsnycklar, idempotenssvar, granskningslogg och inställningar. Uppdrag, kunder och rader som skapats via API:et ligger kvar i Mobigo.

API 0.1.0.0 · Integratörsguide · Swagger · Administration