Przejdź do głównej zawartości

SharePoint

Dzięki integracji SharePoint Speedwave czyta i edytuje pliki, strony oraz listy w jednej witrynie SharePoint, korzystając z Microsoft Graph. Witrynę wskazujesz w chwili podłączenia i Speedwave pozostaje w niej przez cały czas, gdy integracja jest aktywna: prześle dokument, opublikuje stronę czy doda kolumnę do listy, ale nie sięgnie do żadnej innej witryny w twoim tenancie.

Speedwave dostaje tu 28 narzędzi do plików, stron, list i tożsamości. Żadne z nich nie pyta o witrynę: każde wywołanie sięga po site_id wpisany na stałe w workerze. Operacji niszczących nie da się cofnąć.

NarzędzieDziałanie
listFileIdsWypisuje pliki i foldery pod wskazaną ścieżką (domyślnie od katalogu głównego witryny).
getFileFullCzyta komplet metadanych pliku, a samą zawartość dociąga na żądanie.
downloadFilePobiera plik z SharePoint do lokalnej ścieżki w /workspace.
uploadFileWysyła lokalny plik pod wskazaną ścieżkę w SharePoint; do rozstrzygania konfliktów przyjmuje expectedEtag, createOnly lub overwrite.
listPagesWypisuje strony witryny.
getPageCzyta układ i zawartość strony.
createPageTworzy nową stronę.
updatePagePodmienia cały układ strony (Graph nie umie aktualizacji częściowej).
addWebPartDodaje do strony jeden z 13 standardowych typów web part.
updateWebPartZmienia dane istniejącego web part.
removeWebPartUsuwa web part ze strony.
publishPagePublikuje szkic strony, żeby stał się widoczny.
addImageWebPartDodaje web part z obrazem, który wcześniej wgrałeś do witryny.
generateTableOfContentsPrzegląda nagłówki strony i składa z nich listę z odnośnikami.
listListsWypisuje listy witryny.
getListCzyta definicję listy.
createListTworzy nową listę. Wymaga Sites.Manage.All.
updateListZmienia nazwę lub ustawienia listy.
deleteListUsuwa listę. Operacja nieodwracalna.
addListColumnDodaje do listy kolumnę o określonym typie. Wymaga Sites.Manage.All.
removeListColumnUsuwa kolumnę z listy. Operacja nieodwracalna.
listItemsWypisuje elementy listy, opcjonalnie z filtrem OData $filter.
getItemCzyta pojedynczy element.
createItemTworzy nowy element.
updateItemZmienia istniejący element.
deleteItemUsuwa element. Operacja nieodwracalna.
deletePageUsuwa stronę. Operacja nieodwracalna.
getCurrentUserZwraca identyfikator, nazwę wyświetlaną, adres e-mail i user principal name zalogowanego konta.

Lokalne ścieżki dla downloadFile i uploadFile muszą mieścić się w /workspace, a lista wykluczeń blokuje w tym katalogu dostęp do .git, .env, .speedwave, .ssh, .npmrc, .docker i .kube.

Worker SharePoint pracuje we własnym kontenerze i ma pod /tokens/ dwa pliki podpięte tylko do odczytu: token dostępu oraz identyfikator witryny, do której jest przypisany. Dłużej ważnymi poświadczeniami, czyli client ID, tenant ID i refresh tokenem, zarządza worker OAuth po stronie hosta, trzymając je w pliku powiązanym z projektem, którego kontener nigdy nie podpina. Kiedy któregoś z podpiętych plików brakuje albo jest pusty, worker rusza bez klienta i integracja po prostu zostaje nieaktywna, zamiast krzyczeć błędem.

  • Folder~/.speedwave/oauth/<project>/
    • sharepoint.json stan OAuth widoczny tylko dla hosta: clientId, tenantId, refreshToken
  • Folder/tokens/ podpięte do workera tylko do odczytu
    • access_token
    • site_id

Logujesz się tylko raz, w schemacie OAuth device-code flow. Autoryzujesz aplikację w przeglądarce, a Speedwave zapisuje otrzymane tokeny na hoście. Dalej to worker OAuth po stronie hosta dostarcza workerowi SharePoint świeży token dostępu, więc kontener nigdy nie widzi refresh tokena. Token odświeża się z wyprzedzeniem, gdy zbliża się jego wygaśnięcie, a także doraźnie, kiedy Graph odpowie 401. Przy każdym wywołaniu narzędzia w grę wchodzi własny site_id workera, odczytany z /tokens/site_id.

flowchart LR
  A[Worker SharePoint] -->|potrzebuje świeżego tokena| B[Worker OAuth po stronie hosta]
  B -->|refresh_token| C[Microsoft /oauth2/v2.0/token]
  C -->|nowy access_token| D["/tokens/access_token"]
  D -->|ponowny odczyt| A

Żeby podłączyć SharePoint, potrzebujesz zarejestrowanej aplikacji w Azure AD. Zacznij od ogólnego przebiegu integracji opisanego w podłącz integrację, a potem wróć tutaj po trzy wartości typowe dla SharePoint: client_id, tenant_id i site_id.

site_id musi być identyfikatorem witryny z Microsoft Graph, a nie adresem URL z przeglądarki, więc posłuż się jedną z dwóch poniższych postaci.

site_id
acme.sharepoint.com:/sites/Marketing:

Zwróć uwagę na dwukropki: na początku i na końcu.

  1. Otwórz Ustawienia i odszukaj kartę integracji SharePoint.
  2. Wpisz client_id, tenant_id i site_id.
  3. Rozpocznij połączenie. Speedwave uruchamia device-code flow i wyświetla kod urządzenia oraz adres URL Microsoftu.
  4. Wejdź pod ten adres, podaj kod i zaloguj się kontem, które ma dostęp do witryny. Zatwierdź wskazane uprawnienia.
  5. Po zakończeniu logowania Speedwave zapisuje tokeny na hoście i worker SharePoint staje się aktywny.

Speedwave działa tylko przez Microsoft Graph i tylko na witrynie, do której worker został przypisany przy konfiguracji. Nawigacji witryny nie ruszy, bo Microsoft Graph nie wystawia do niej żadnych endpointów, więc zmiany w nawigacji robisz w interfejsie SharePoint. Kontener nigdy nie trzyma refresh tokena, ma jedynie krótko żyjący token dostępu, którego samodzielnie nie odnowi. To, gdzie leżą te pliki i dlaczego każdy worker widzi wyłącznie poświadczenia swojej własnej usługi, wyjaśniamy w jak obsługiwane są dane uwierzytelniające.