Add Activepieces integration for workflow automation

- Add Activepieces fork with SmoothSchedule custom piece
- Create integrations app with Activepieces service layer
- Add embed token endpoint for iframe integration
- Create Automations page with embedded workflow builder
- Add sidebar visibility fix for embed mode
- Add list inactive customers endpoint to Public API
- Include SmoothSchedule triggers: event created/updated/cancelled
- Include SmoothSchedule actions: create/update/cancel events, list resources/services/customers

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-18 22:59:37 -05:00
parent 9848268d34
commit 3aa7199503
16292 changed files with 1284892 additions and 4708 deletions

View File

@@ -0,0 +1,87 @@
{
"Okta Domain": "Okta-Domain",
"API Token": "API Token",
"Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)": "Deine Okta Organisation Domain (z.B. https://dev-12345.okta.com oder dev-12345.okta.com)",
"Your Okta API token (from Admin → Security → API → Tokens)": "Ihr Okta API Token (von Admin → Sicherheit → API → Token)",
"Create User": "Benutzer erstellen",
"Activate User": "Benutzer aktivieren",
"Deactivate User": "Benutzer deaktivieren",
"Suspend User": "Benutzer sperren",
"Add User to Group": "Benutzer zur Gruppe hinzufügen",
"Remove User from Group": "Benutzer aus Gruppe entfernen",
"Update User": "Benutzer aktualisieren",
"Find User by Email": "Benutzer per E-Mail finden",
"Find Group by Name": "Gruppe nach Namen suchen",
"Custom API Call": "Eigener API-Aufruf",
"Creates a user without credentials and sends account creation prompt via email": "Erstellt einen Benutzer ohne Anmeldedaten und sendet eine Anfrage zur Kontoerstellung per E-Mail",
"Activate a previously deactivated or pending user": "Aktivieren Sie einen zuvor deaktivierten oder ausstehenden Benutzer",
"Deactivate (disable) a user in Okta": "Benutzer in Okta deaktivieren (deaktivieren)",
"Temporarily suspend a user in Okta": "Benutzer in Okta vorübergehend sperren",
"Add a user to a specific Okta group": "Benutzer zu einer bestimmten Okta-Gruppe hinzufügen",
"Remove a user from an Okta group": "Benutzer aus einer Okta-Gruppe entfernen",
"Update user profile information": "Benutzerprofilinformationen aktualisieren",
"Look up an Okta user by their email address": "Suche einen Okta-Benutzer nach seiner E-Mail-Adresse",
"Search for an Okta group by name": "Suche nach einer Okta-Gruppe nach Namen",
"Make a custom API call to a specific endpoint": "Einen benutzerdefinierten API-Aufruf an einen bestimmten Endpunkt machen",
"First Name": "Vorname",
"Last Name": "Nachname",
"Email": "E-Mail",
"Login": "Anmelden",
"Mobile Phone": "Handy",
"Send Email": "E-Mail senden",
"User": "Benutzer",
"Group": "Gruppe",
"Custom Attributes": "Eigene Attribute",
"Group Name": "Gruppenname",
"Method": "Methode",
"Headers": "Kopfzeilen",
"Query Parameters": "Abfrageparameter",
"Body": "Körper",
"Response is Binary ?": "Antwort ist binär?",
"No Error on Failure": "Kein Fehler bei Fehler",
"Timeout (in seconds)": "Timeout (in Sekunden)",
"User first name": "Benutzervorname",
"User last name": "Benutzername Nachname",
"User email address": "E-Mail-Adresse des Benutzers",
"User login (typically same as email)": "Benutzeranmeldung (typischerweise gleich wie E-Mail)",
"User mobile phone number": "Handynummer des Benutzers",
"Send account creation email to user": "Sende E-Mail zur Kontoerstellung an Benutzer",
"Select a user": "Benutzer auswählen",
"Send activation email to user": "Aktivierungs-E-Mail an Benutzer senden",
"Send deactivation email to user": "Deaktivierungs-E-Mail an Benutzer senden",
"Select a group": "Wählen Sie eine Gruppe",
"Updated first name": "Aktualisierter Vorname",
"Updated last name": "Aktualisierter Nachname",
"Updated email address": "E-Mail-Adresse aktualisiert",
"Updated mobile phone number": "Mobiltelefonnummer aktualisiert",
"JSON object with custom profile attributes": "JSON-Objekt mit eigenen Profilattributen",
"Your Okta organization domain": "Ihre Okta Organisationsdomain",
"The user email address": "Die E-Mail-Adresse des Benutzers",
"The group name to search for": "Der zu suchende Gruppenname",
"Authorization headers are injected automatically from your connection.": "Autorisierungs-Header werden automatisch von Ihrer Verbindung injiziert.",
"Enable for files like PDFs, images, etc..": "Aktivieren für Dateien wie PDFs, Bilder, etc..",
"GET": "ERHALTEN",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "LÖSCHEN",
"HEAD": "HEAD",
"New Event": "Neues Ereignis",
"Fires when a new Okta event is generated": "Feuert ab, wenn ein neues Okta-Ereignis generiert wird",
"Event Types to Monitor": "Zu überwachende Ereignistypen",
"Hook Name": "Hakenname",
"Select which event types to trigger on": "Wählen Sie, welche Ereignistypen ausgelöst werden sollen",
"Name for the Okta Event Hook (optional)": "Name für den Okta Event Hook (optional)",
"User Created": "Benutzer erstellt",
"User Activated": "Benutzer aktiviert",
"User Deactivated": "Benutzer deaktiviert",
"User Suspended": "Benutzer unterbrochen",
"User Unsuspended": "Benutzer nicht gesperrt",
"User Deleted": "Benutzer gelöscht",
"User Added to Group": "Benutzer zur Gruppe hinzugefügt",
"User Removed from Group": "Benutzer aus Gruppe entfernt",
"Group Created": "Gruppe erstellt",
"Group Deleted": "Gruppe gelöscht",
"User Login": "Benutzeranmeldung",
"User Logout": "Benutzer abmelden"
}

View File

@@ -0,0 +1,87 @@
{
"Okta Domain": "Dominio Okta",
"API Token": "API Token",
"Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)": "El dominio de su organización Okta (p.ej., https://dev-12345.okta.com o dev-12345.okta.com)",
"Your Okta API token (from Admin → Security → API → Tokens)": "Su token Okta API (desde Admin → Seguridad → API → Tokens)",
"Create User": "Crear usuario",
"Activate User": "Activar usuario",
"Deactivate User": "Desactivar usuario",
"Suspend User": "Suspender usuario",
"Add User to Group": "Añadir usuario al grupo",
"Remove User from Group": "Eliminar usuario del grupo",
"Update User": "Actualizar usuario",
"Find User by Email": "Buscar usuario por email",
"Find Group by Name": "Buscar grupo por nombre",
"Custom API Call": "Llamada API personalizada",
"Creates a user without credentials and sends account creation prompt via email": "Crea un usuario sin credenciales y envía un mensaje de creación de cuenta por correo electrónico",
"Activate a previously deactivated or pending user": "Activar un usuario previamente desactivado o pendiente",
"Deactivate (disable) a user in Okta": "Desactivar (desactivar) un usuario en Okta",
"Temporarily suspend a user in Okta": "Suspender temporalmente a un usuario en Okta",
"Add a user to a specific Okta group": "Añadir un usuario a un grupo Okta específico",
"Remove a user from an Okta group": "Eliminar un usuario de un grupo Okta",
"Update user profile information": "Actualizar información del perfil de usuario",
"Look up an Okta user by their email address": "Buscar un usuario Okta por su dirección de correo electrónico",
"Search for an Okta group by name": "Buscar un grupo Okta por nombre",
"Make a custom API call to a specific endpoint": "Hacer una llamada API personalizada a un extremo específico",
"First Name": "Nombre",
"Last Name": "Apellido",
"Email": "E-mail",
"Login": "Ingresar",
"Mobile Phone": "Teléfono móvil",
"Send Email": "Enviar Email",
"User": "Usuario",
"Group": "Grupo",
"Custom Attributes": "Atributos personalizados",
"Group Name": "Nombre del grupo",
"Method": "Método",
"Headers": "Encabezados",
"Query Parameters": "Parámetros de consulta",
"Body": "Cuerpo",
"Response is Binary ?": "¿Respuesta es binaria?",
"No Error on Failure": "No hay ningún error en fallo",
"Timeout (in seconds)": "Tiempo de espera (en segundos)",
"User first name": "Nombre de usuario",
"User last name": "Apellido del usuario",
"User email address": "Dirección de email del usuario",
"User login (typically same as email)": "Inicio de sesión de usuario (normalmente igual que el correo electrónico)",
"User mobile phone number": "Número de teléfono móvil del usuario",
"Send account creation email to user": "Enviar email de creación de cuenta al usuario",
"Select a user": "Seleccione un usuario",
"Send activation email to user": "Enviar email de activación al usuario",
"Send deactivation email to user": "Enviar email de desactivación al usuario",
"Select a group": "Seleccione un grupo",
"Updated first name": "Nombre actualizado",
"Updated last name": "Apellido actualizado",
"Updated email address": "Correo electrónico actualizado",
"Updated mobile phone number": "Número de teléfono móvil actualizado",
"JSON object with custom profile attributes": "Objeto JSON con atributos de perfil personalizados",
"Your Okta organization domain": "Tu dominio de la organización Okta",
"The user email address": "La dirección de correo del usuario",
"The group name to search for": "El nombre del grupo a buscar",
"Authorization headers are injected automatically from your connection.": "Las cabeceras de autorización se inyectan automáticamente desde tu conexión.",
"Enable for files like PDFs, images, etc..": "Activar para archivos como PDFs, imágenes, etc.",
"GET": "RECOGER",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "BORRAR",
"HEAD": "LIMPIO",
"New Event": "Nuevo evento",
"Fires when a new Okta event is generated": "Dispara cuando se genera un nuevo evento Okta",
"Event Types to Monitor": "Tipos de Evento a Monitorizar",
"Hook Name": "Nombre del Hook",
"Select which event types to trigger on": "Seleccione en qué tipos de evento activar",
"Name for the Okta Event Hook (optional)": "Nombre para el Okta Event Hook (opcional)",
"User Created": "Usuario creado",
"User Activated": "Usuario activado",
"User Deactivated": "Usuario desactivado",
"User Suspended": "Usuario suspendido",
"User Unsuspended": "Usuario no suspendido",
"User Deleted": "Usuario eliminado",
"User Added to Group": "Usuario añadido al grupo",
"User Removed from Group": "Usuario eliminado del grupo",
"Group Created": "Grupo creado",
"Group Deleted": "Grupo eliminado",
"User Login": "Inicio de sesión",
"User Logout": "Cerrar sesión"
}

View File

@@ -0,0 +1,87 @@
{
"Okta Domain": "Domaine Okta",
"API Token": "API Token",
"Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)": "Votre domaine d'organisation Okta (par exemple, https://dev-12345.okta.com ou dev-12345.okta.com)",
"Your Okta API token (from Admin → Security → API → Tokens)": "Votre jeton d'API Okta (depuis Admin → Sécurité → API → Tokens)",
"Create User": "Créer un utilisateur",
"Activate User": "Activer l'utilisateur",
"Deactivate User": "Désactiver l'utilisateur",
"Suspend User": "Suspendre l'utilisateur",
"Add User to Group": "Ajouter un utilisateur au groupe",
"Remove User from Group": "Retirer l'utilisateur du groupe",
"Update User": "Mise à jour de l'utilisateur",
"Find User by Email": "Trouver un utilisateur par e-mail",
"Find Group by Name": "Rechercher un groupe par nom",
"Custom API Call": "Appel d'API personnalisé",
"Creates a user without credentials and sends account creation prompt via email": "Crée un utilisateur sans identifiants et envoie une invite de création de compte par e-mail",
"Activate a previously deactivated or pending user": "Activer un utilisateur précédemment désactivé ou en attente",
"Deactivate (disable) a user in Okta": "Désactiver (désactiver) un utilisateur dans Okta",
"Temporarily suspend a user in Okta": "Suspendre temporairement un utilisateur en Okta",
"Add a user to a specific Okta group": "Ajouter un utilisateur à un groupe Okta spécifique",
"Remove a user from an Okta group": "Retirer un utilisateur d'un groupe Okta",
"Update user profile information": "Mettre à jour les informations du profil utilisateur",
"Look up an Okta user by their email address": "Rechercher un utilisateur Okta par son adresse e-mail",
"Search for an Okta group by name": "Rechercher un groupe Okta par nom",
"Make a custom API call to a specific endpoint": "Passer un appel API personnalisé à un endpoint spécifique",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Courriel",
"Login": "Se connecter",
"Mobile Phone": "Téléphone mobile",
"Send Email": "Envoyer un e-mail",
"User": "Utilisateur",
"Group": "Groupes",
"Custom Attributes": "Attributs personnalisés",
"Group Name": "Nom du groupe",
"Method": "Méthode",
"Headers": "Headers",
"Query Parameters": "Paramètres de requête",
"Body": "Body",
"Response is Binary ?": "La réponse est Binaire ?",
"No Error on Failure": "Aucune erreur en cas d'échec",
"Timeout (in seconds)": "Délai d'expiration (en secondes)",
"User first name": "Prénom de l'utilisateur",
"User last name": "Nom d'utilisateur",
"User email address": "Adresse e-mail de l'utilisateur",
"User login (typically same as email)": "Connexion de l'utilisateur (généralement identique à l'e-mail)",
"User mobile phone number": "Numéro de téléphone portable de l'utilisateur",
"Send account creation email to user": "Envoyer un e-mail de création de compte à l'utilisateur",
"Select a user": "Sélectionnez un utilisateur",
"Send activation email to user": "Envoyer un e-mail d'activation à l'utilisateur",
"Send deactivation email to user": "Envoyer un e-mail de désactivation à l'utilisateur",
"Select a group": "Sélectionner un groupe",
"Updated first name": "Prénom mis à jour",
"Updated last name": "Nom de famille mis à jour",
"Updated email address": "Adresse e-mail mise à jour",
"Updated mobile phone number": "Numéro de téléphone mobile mis à jour",
"JSON object with custom profile attributes": "Objet JSON avec des attributs de profil personnalisés",
"Your Okta organization domain": "Votre domaine d'organisation Okta",
"The user email address": "L'adresse e-mail de l'utilisateur",
"The group name to search for": "Le nom du groupe à rechercher",
"Authorization headers are injected automatically from your connection.": "Les Headers d'autorisation sont injectés automatiquement à partir de votre connexion.",
"Enable for files like PDFs, images, etc..": "Activer pour les fichiers comme les PDFs, les images, etc.",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Event": "Nouvel événement",
"Fires when a new Okta event is generated": "Tire quand un nouvel événement Okta est généré",
"Event Types to Monitor": "Types d'événements à surveiller",
"Hook Name": "Nom du crochet",
"Select which event types to trigger on": "Sélectionner les types d'événements à déclencher",
"Name for the Okta Event Hook (optional)": "Nom du crochet d'événements Okta (facultatif)",
"User Created": "Utilisateur créé",
"User Activated": "Utilisateur activé",
"User Deactivated": "Utilisateur désactivé",
"User Suspended": "Utilisateur suspendu",
"User Unsuspended": "Utilisateur non suspendu",
"User Deleted": "Utilisateur supprimé",
"User Added to Group": "Utilisateur ajouté au groupe",
"User Removed from Group": "Utilisateur supprimé du groupe",
"Group Created": "Groupe créé",
"Group Deleted": "Groupe supprimé",
"User Login": "Connexion de l'utilisateur",
"User Logout": "Déconnexion de l'utilisateur"
}

View File

@@ -0,0 +1,87 @@
{
"Okta Domain": "オクタ藩",
"API Token": "API Token",
"Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)": "Okta Organization domain (例: https://dev-12345.okta.com or dev-12345.okta.com)",
"Your Okta API token (from Admin → Security → API → Tokens)": "Okta API トークン (管理者 → セキュリティ → API → トークン)",
"Create User": "ユーザーを作成",
"Activate User": "ユーザーを有効にする",
"Deactivate User": "ユーザーを無効にする",
"Suspend User": "サスペンドユーザー",
"Add User to Group": "ユーザーをグループに追加",
"Remove User from Group": "ユーザーをグループから削除",
"Update User": "ユーザーを更新",
"Find User by Email": "メールでユーザーを検索",
"Find Group by Name": "名前でグループを検索",
"Custom API Call": "カスタムAPI通話",
"Creates a user without credentials and sends account creation prompt via email": "資格情報を持たないユーザーを作成し、電子メールでアカウント作成プロンプトを送信します",
"Activate a previously deactivated or pending user": "以前に非アクティブまたは保留中のユーザーを有効にする",
"Deactivate (disable) a user in Okta": "Okta のユーザーを無効化(無効化)",
"Temporarily suspend a user in Okta": "Okta で一時的に利用者を一時停止します",
"Add a user to a specific Okta group": "特定の Okta グループにユーザーを追加",
"Remove a user from an Okta group": "Okta グループからユーザーを削除",
"Update user profile information": "ユーザープロファイル情報を更新",
"Look up an Okta user by their email address": "自分のメールアドレスで Okta ユーザーを検索する",
"Search for an Okta group by name": "名前でOktaグループを検索",
"Make a custom API call to a specific endpoint": "特定のエンドポイントへのカスタム API コールを実行します。",
"First Name": "名",
"Last Name": "Last Name",
"Email": "Eメールアドレス",
"Login": "ログイン",
"Mobile Phone": "携帯電話",
"Send Email": "メール送信",
"User": "ユーザー",
"Group": "グループ",
"Custom Attributes": "カスタム属性",
"Group Name": "グループ名",
"Method": "方法",
"Headers": "ヘッダー",
"Query Parameters": "クエリパラメータ",
"Body": "本文",
"Response is Binary ?": "応答はバイナリですか?",
"No Error on Failure": "失敗時にエラーはありません",
"Timeout (in seconds)": "タイムアウト(秒)",
"User first name": "ユーザー名",
"User last name": "ユーザーの姓",
"User email address": "ユーザーのメールアドレス",
"User login (typically same as email)": "ユーザーログイン(通常はメールアドレスと同じ)",
"User mobile phone number": "ユーザーの携帯電話番号",
"Send account creation email to user": "ユーザーにアカウント作成メールを送信",
"Select a user": "利用者を選択",
"Send activation email to user": "アクティベーションメールをユーザーに送信",
"Send deactivation email to user": "無効化メールをユーザーに送信",
"Select a group": "グループを選択",
"Updated first name": "姓を更新しました",
"Updated last name": "姓を更新しました",
"Updated email address": "更新されたメールアドレス",
"Updated mobile phone number": "携帯電話番号の更新",
"JSON object with custom profile attributes": "カスタムプロファイル属性を持つJSONオブジェクト",
"Your Okta organization domain": "Okta Organization ドメイン",
"The user email address": "ユーザーのメールアドレス",
"The group name to search for": "検索するグループ名",
"Authorization headers are injected automatically from your connection.": "認証ヘッダは接続から自動的に注入されます。",
"Enable for files like PDFs, images, etc..": "PDF、画像などのファイルを有効にします。",
"GET": "取得",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "削除",
"HEAD": "頭",
"New Event": "新しいイベント",
"Fires when a new Okta event is generated": "新しい Okta イベントが生成されたときに発生します",
"Event Types to Monitor": "モニタリングするイベントタイプ",
"Hook Name": "フック名",
"Select which event types to trigger on": "トリガーするイベントタイプを選択してください",
"Name for the Okta Event Hook (optional)": "Okta Event Hookの名前オプション",
"User Created": "ユーザーが作成されました",
"User Activated": "ユーザーがアクティベートされました",
"User Deactivated": "ユーザーが無効になりました",
"User Suspended": "ユーザーが一時停止しました",
"User Unsuspended": "ユーザーが一時停止を解除しました",
"User Deleted": "ユーザーが削除されました",
"User Added to Group": "ユーザーがグループに追加されました",
"User Removed from Group": "ユーザーがグループから削除されました",
"Group Created": "グループが作成されました",
"Group Deleted": "グループを削除しました",
"User Login": "ユーザーログイン",
"User Logout": "ユーザーログアウト"
}

View File

@@ -0,0 +1,87 @@
{
"Okta Domain": "Okta Domein",
"API Token": "API Token",
"Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)": "Uw Okta organisatie domein (bijv. https://dev-12345.okta.com of dev-12345.okta.com)",
"Your Okta API token (from Admin → Security → API → Tokens)": "Je Okta API-token (van Admin → Beveiliging → API → Tokens)",
"Create User": "Gebruiker aanmaken",
"Activate User": "Gebruiker activeren",
"Deactivate User": "Gebruiker deactiveren",
"Suspend User": "Gebruiker opschorten",
"Add User to Group": "Gebruiker toevoegen aan groep",
"Remove User from Group": "Gebruiker uit de groep verwijderen",
"Update User": "Gebruiker bijwerken",
"Find User by Email": "Gebruiker zoeken per e-mail",
"Find Group by Name": "Zoek groep op naam",
"Custom API Call": "Custom API Call",
"Creates a user without credentials and sends account creation prompt via email": "Maakt een gebruiker aan zonder inloggegevens en verzendt het aanmaken van een account via e-mail",
"Activate a previously deactivated or pending user": "Activeer een eerder gedeactiveerde of in behandeling zijnde gebruiker",
"Deactivate (disable) a user in Okta": "Een gebruiker in Okta deactiveren (uitschakelen)",
"Temporarily suspend a user in Okta": "Een gebruiker in Okta tijdelijk opschorten",
"Add a user to a specific Okta group": "Een gebruiker toevoegen aan een specifieke Okta groep",
"Remove a user from an Okta group": "Verwijder een gebruiker van een Okta-groep",
"Update user profile information": "Gebruikersprofielinformatie bijwerken",
"Look up an Okta user by their email address": "Zoek een Okta-gebruiker met zijn e-mailadres",
"Search for an Okta group by name": "Zoek naar een Okta groep op naam",
"Make a custom API call to a specific endpoint": "Maak een aangepaste API call naar een specifiek eindpunt",
"First Name": "Voornaam",
"Last Name": "Achternaam",
"Email": "E-mail",
"Login": "Aanmelden",
"Mobile Phone": "Telefoon (mobiel)",
"Send Email": "E-mail verzenden",
"User": "Gebruiker",
"Group": "Groeperen",
"Custom Attributes": "Aangepaste kenmerken",
"Group Name": "Groep Naam",
"Method": "Methode",
"Headers": "Kopteksten",
"Query Parameters": "Query parameters",
"Body": "Lichaam",
"Response is Binary ?": "Antwoord is binair?",
"No Error on Failure": "Geen fout bij fout",
"Timeout (in seconds)": "Time-out (in seconden)",
"User first name": "Gebruiker voornaam",
"User last name": "Gebruiker achternaam",
"User email address": "E-mailadres van gebruiker",
"User login (typically same as email)": "Gebruikersinlog (meestal hetzelfde als e-mail)",
"User mobile phone number": "Mobiel nummer gebruiker",
"Send account creation email to user": "Stuur account aanmaak e-mail naar gebruiker",
"Select a user": "Selecteer een gebruiker",
"Send activation email to user": "Stuur activatie e-mail naar de gebruiker",
"Send deactivation email to user": "Stuur deactivatie e-mail naar de gebruiker",
"Select a group": "Selecteer een groep",
"Updated first name": "Voornaam bijgewerkt",
"Updated last name": "Achternaam bijgewerkt",
"Updated email address": "Bijgewerkte e-mailadres",
"Updated mobile phone number": "Bijgewerkt mobiel telefoonnummer",
"JSON object with custom profile attributes": "JSON-object met aangepaste profielkenmerken",
"Your Okta organization domain": "Je Okta-organisatiedomein",
"The user email address": "Het e-mailadres van de gebruiker",
"The group name to search for": "De groepsnaam om naar te zoeken",
"Authorization headers are injected automatically from your connection.": "Autorisatie headers worden automatisch geïnjecteerd vanuit uw verbinding.",
"Enable for files like PDFs, images, etc..": "Inschakelen voor bestanden zoals PDF's, afbeeldingen etc..",
"GET": "KRIJG",
"POST": "POSTE",
"PATCH": "BEKIJK",
"PUT": "PUT",
"DELETE": "VERWIJDEREN",
"HEAD": "HOOFD",
"New Event": "Nieuwe gebeurtenis",
"Fires when a new Okta event is generated": "Vuurt wanneer een nieuwe Okta gebeurtenis wordt gegenereerd",
"Event Types to Monitor": "Te monitoren event typen",
"Hook Name": "Haak naam",
"Select which event types to trigger on": "Selecteer welke event types moeten worden geactiveerd op",
"Name for the Okta Event Hook (optional)": "Naam voor de Okta Event Hook (optioneel)",
"User Created": "Gebruiker aangemaakt",
"User Activated": "Gebruiker geactiveerd",
"User Deactivated": "Gebruiker gedeactiveerd",
"User Suspended": "Gebruiker geschorst",
"User Unsuspended": "Gebruiker Ongeschorst",
"User Deleted": "Gebruiker verwijderd",
"User Added to Group": "Gebruiker toegevoegd aan groep",
"User Removed from Group": "Gebruiker verwijderd uit groep",
"Group Created": "Groep aangemaakt",
"Group Deleted": "Groep verwijderd",
"User Login": "Gebruiker login",
"User Logout": "Gebruiker uitloggen"
}

View File

@@ -0,0 +1,87 @@
{
"Okta Domain": "Okta domínio",
"API Token": "API Token",
"Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)": "Seu domínio da organização Okta (ex.: https://dev-12345.okta.com ou dev-12345.okta.com)",
"Your Okta API token (from Admin → Security → API → Tokens)": "O seu token Okta API (de Admin → Segurança → API → Tokens)",
"Create User": "Criar Usuário",
"Activate User": "Ativar Usuário",
"Deactivate User": "Desativar Usuário",
"Suspend User": "Suspender Usuário",
"Add User to Group": "Adicionar Usuário ao Grupo",
"Remove User from Group": "Remover Usuário do Grupo",
"Update User": "Atualizar usuário",
"Find User by Email": "Encontrar usuário por e-mail",
"Find Group by Name": "Localizar grupo por nome",
"Custom API Call": "Chamada de API personalizada",
"Creates a user without credentials and sends account creation prompt via email": "Cria um usuário sem credenciais e envia a solicitação de criação de conta via e-mail",
"Activate a previously deactivated or pending user": "Ativar um usuário desativado anteriormente ou pendente",
"Deactivate (disable) a user in Okta": "Desativar (desativar) um usuário em Okta",
"Temporarily suspend a user in Okta": "Suspender temporariamente um usuário em Okta",
"Add a user to a specific Okta group": "Adicionar um usuário a um grupo específico do Okta",
"Remove a user from an Okta group": "Remover um usuário de um grupo de Okta",
"Update user profile information": "Atualizar informações do perfil do usuário",
"Look up an Okta user by their email address": "Procurar um usuário do Okta usando seu endereço de e-mail",
"Search for an Okta group by name": "Procure por um grupo de Okta pelo nome",
"Make a custom API call to a specific endpoint": "Faça uma chamada de API personalizada para um ponto de extremidade específico",
"First Name": "Nome",
"Last Name": "Sobrenome",
"Email": "e-mail",
"Login": "Conectar-se",
"Mobile Phone": "Telefone Celular",
"Send Email": "Enviar e-mail",
"User": "Usuário",
"Group": "grupo",
"Custom Attributes": "Atributos personalizados",
"Group Name": "Nome do Grupo",
"Method": "Método",
"Headers": "Cabeçalhos",
"Query Parameters": "Parâmetros da consulta",
"Body": "Conteúdo",
"Response is Binary ?": "A resposta é binária ?",
"No Error on Failure": "Nenhum erro no Failure",
"Timeout (in seconds)": "Tempo limite (em segundos)",
"User first name": "Primeiro nome de usuário",
"User last name": "Sobrenome do usuário",
"User email address": "E-mail do usuário",
"User login (typically same as email)": "Login do usuário (tipicamente o mesmo que e-mail)",
"User mobile phone number": "Número de telefone do usuário",
"Send account creation email to user": "Enviar e-mail de criação de conta para o usuário",
"Select a user": "Selecione um usuário",
"Send activation email to user": "Enviar e-mail de ativação para o usuário",
"Send deactivation email to user": "Enviar e-mail de desativação para o usuário",
"Select a group": "Selecionar um grupo",
"Updated first name": "Primeiro nome atualizado",
"Updated last name": "Sobrenome atualizado",
"Updated email address": "Endereço de e-mail atualizado",
"Updated mobile phone number": "Número de telefone celular atualizado",
"JSON object with custom profile attributes": "Objeto JSON com atributos de perfil personalizados",
"Your Okta organization domain": "Seu domínio da organização Okta",
"The user email address": "O endereço de e-mail do usuário",
"The group name to search for": "O nome do grupo para procurar",
"Authorization headers are injected automatically from your connection.": "Os cabeçalhos de autorização são inseridos automaticamente a partir da sua conexão.",
"Enable for files like PDFs, images, etc..": "Habilitar para arquivos como PDFs, imagens, etc..",
"GET": "OBTER",
"POST": "POSTAR",
"PATCH": "COMPRAR",
"PUT": "COLOCAR",
"DELETE": "EXCLUIR",
"HEAD": "CABEÇA",
"New Event": "Novo evento",
"Fires when a new Okta event is generated": "Atira quando um novo evento de Okta é gerado",
"Event Types to Monitor": "Tipos de Evento para Monitorar",
"Hook Name": "Nome do Hook",
"Select which event types to trigger on": "Selecione quais tipos de eventos serão acionados",
"Name for the Okta Event Hook (optional)": "Nome para o Hook do Evento Okta (opcional)",
"User Created": "Criado pelo Usuário",
"User Activated": "Usuário ativado",
"User Deactivated": "Usuário desativado",
"User Suspended": "Usuário Suspenso",
"User Unsuspended": "Usuário Dessuspenso",
"User Deleted": "Usuário Excluído",
"User Added to Group": "Usuário adicionado ao Grupo",
"User Removed from Group": "Usuário Removido do Grupo",
"Group Created": "Grupo criado",
"Group Deleted": "Grupo excluído",
"User Login": "Login de Usuário",
"User Logout": "Desconectar do usuário"
}

View File

@@ -0,0 +1,87 @@
{
"Okta Domain": "Okta Domain",
"API Token": "API Token",
"Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)": "Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)",
"Your Okta API token (from Admin → Security → API → Tokens)": "Your Okta API token (from Admin → Security → API → Tokens)",
"Create User": "Create User",
"Activate User": "Activate User",
"Deactivate User": "Deactivate User",
"Suspend User": "Suspend User",
"Add User to Group": "Add User to Group",
"Remove User from Group": "Remove User from Group",
"Update User": "Update User",
"Find User by Email": "Find User by Email",
"Find Group by Name": "Find Group by Name",
"Custom API Call": "Custom API Call",
"Creates a user without credentials and sends account creation prompt via email": "Creates a user without credentials and sends account creation prompt via email",
"Activate a previously deactivated or pending user": "Activate a previously deactivated or pending user",
"Deactivate (disable) a user in Okta": "Deactivate (disable) a user in Okta",
"Temporarily suspend a user in Okta": "Temporarily suspend a user in Okta",
"Add a user to a specific Okta group": "Add a user to a specific Okta group",
"Remove a user from an Okta group": "Remove a user from an Okta group",
"Update user profile information": "Update user profile information",
"Look up an Okta user by their email address": "Look up an Okta user by their email address",
"Search for an Okta group by name": "Search for an Okta group by name",
"Make a custom API call to a specific endpoint": "Make a custom API call to a specific endpoint",
"First Name": "First Name",
"Last Name": "Last Name",
"Email": "Email",
"Login": "Login",
"Mobile Phone": "Mobile Phone",
"Send Email": "Send Email",
"User": "User",
"Group": "Group",
"Custom Attributes": "Custom Attributes",
"Group Name": "Group Name",
"Method": "Method",
"Headers": "Headers",
"Query Parameters": "Query Parameters",
"Body": "Body",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "No Error on Failure",
"Timeout (in seconds)": "Timeout (in seconds)",
"User first name": "User first name",
"User last name": "User last name",
"User email address": "User email address",
"User login (typically same as email)": "User login (typically same as email)",
"User mobile phone number": "User mobile phone number",
"Send account creation email to user": "Send account creation email to user",
"Select a user": "Select a user",
"Send activation email to user": "Send activation email to user",
"Send deactivation email to user": "Send deactivation email to user",
"Select a group": "Select a group",
"Updated first name": "Updated first name",
"Updated last name": "Updated last name",
"Updated email address": "Updated email address",
"Updated mobile phone number": "Updated mobile phone number",
"JSON object with custom profile attributes": "JSON object with custom profile attributes",
"Your Okta organization domain": "Your Okta organization domain",
"The user email address": "The user email address",
"The group name to search for": "The group name to search for",
"Authorization headers are injected automatically from your connection.": "Authorization headers are injected automatically from your connection.",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"GET": "GET",
"POST": "POST",
"PATCH": "PATCH",
"PUT": "PUT",
"DELETE": "DELETE",
"HEAD": "HEAD",
"New Event": "New Event",
"Fires when a new Okta event is generated": "Fires when a new Okta event is generated",
"Event Types to Monitor": "Event Types to Monitor",
"Hook Name": "Hook Name",
"Select which event types to trigger on": "Select which event types to trigger on",
"Name for the Okta Event Hook (optional)": "Name for the Okta Event Hook (optional)",
"User Created": "User Created",
"User Activated": "User Activated",
"User Deactivated": "User Deactivated",
"User Suspended": "User Suspended",
"User Unsuspended": "User Unsuspended",
"User Deleted": "User Deleted",
"User Added to Group": "User Added to Group",
"User Removed from Group": "User Removed from Group",
"Group Created": "Group Created",
"Group Deleted": "Group Deleted",
"User Login": "User Login",
"User Logout": "User Logout"
}

View File

@@ -0,0 +1,87 @@
{
"Okta Domain": "Okta Domain",
"API Token": "API Token",
"Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)": "Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)",
"Your Okta API token (from Admin → Security → API → Tokens)": "Your Okta API token (from Admin → Security → API → Tokens)",
"Create User": "Create User",
"Activate User": "Activate User",
"Deactivate User": "Deactivate User",
"Suspend User": "Suspend User",
"Add User to Group": "Add User to Group",
"Remove User from Group": "Remove User from Group",
"Update User": "Update User",
"Find User by Email": "Find User by Email",
"Find Group by Name": "Find Group by Name",
"Custom API Call": "自定义 API 呼叫",
"Creates a user without credentials and sends account creation prompt via email": "Creates a user without credentials and sends account creation prompt via email",
"Activate a previously deactivated or pending user": "Activate a previously deactivated or pending user",
"Deactivate (disable) a user in Okta": "Deactivate (disable) a user in Okta",
"Temporarily suspend a user in Okta": "Temporarily suspend a user in Okta",
"Add a user to a specific Okta group": "Add a user to a specific Okta group",
"Remove a user from an Okta group": "Remove a user from an Okta group",
"Update user profile information": "Update user profile information",
"Look up an Okta user by their email address": "Look up an Okta user by their email address",
"Search for an Okta group by name": "Search for an Okta group by name",
"Make a custom API call to a specific endpoint": "将一个自定义 API 调用到一个特定的终点",
"First Name": "First Name",
"Last Name": "名字",
"Email": "电子邮件地址",
"Login": "Login",
"Mobile Phone": "Mobile Phone",
"Send Email": "Send Email",
"User": "用户",
"Group": "Group",
"Custom Attributes": "Custom Attributes",
"Group Name": "Group Name",
"Method": "方法",
"Headers": "信头",
"Query Parameters": "查询参数",
"Body": "正文内容",
"Response is Binary ?": "Response is Binary ?",
"No Error on Failure": "失败时没有错误",
"Timeout (in seconds)": "超时(秒)",
"User first name": "User first name",
"User last name": "User last name",
"User email address": "User email address",
"User login (typically same as email)": "User login (typically same as email)",
"User mobile phone number": "User mobile phone number",
"Send account creation email to user": "Send account creation email to user",
"Select a user": "Select a user",
"Send activation email to user": "Send activation email to user",
"Send deactivation email to user": "Send deactivation email to user",
"Select a group": "Select a group",
"Updated first name": "Updated first name",
"Updated last name": "Updated last name",
"Updated email address": "Updated email address",
"Updated mobile phone number": "Updated mobile phone number",
"JSON object with custom profile attributes": "JSON object with custom profile attributes",
"Your Okta organization domain": "Your Okta organization domain",
"The user email address": "The user email address",
"The group name to search for": "The group name to search for",
"Authorization headers are injected automatically from your connection.": "授权头自动从您的连接中注入。",
"Enable for files like PDFs, images, etc..": "Enable for files like PDFs, images, etc..",
"GET": "获取",
"POST": "帖子",
"PATCH": "PATCH",
"PUT": "弹出",
"DELETE": "删除",
"HEAD": "黑色",
"New Event": "New Event",
"Fires when a new Okta event is generated": "Fires when a new Okta event is generated",
"Event Types to Monitor": "Event Types to Monitor",
"Hook Name": "Hook Name",
"Select which event types to trigger on": "Select which event types to trigger on",
"Name for the Okta Event Hook (optional)": "Name for the Okta Event Hook (optional)",
"User Created": "User Created",
"User Activated": "User Activated",
"User Deactivated": "User Deactivated",
"User Suspended": "User Suspended",
"User Unsuspended": "User Unsuspended",
"User Deleted": "User Deleted",
"User Added to Group": "User Added to Group",
"User Removed from Group": "User Removed from Group",
"Group Created": "Group Created",
"Group Deleted": "Group Deleted",
"User Login": "User Login",
"User Logout": "User Logout"
}

View File

@@ -0,0 +1,42 @@
import { createPiece } from '@activepieces/pieces-framework';
import { PieceCategory } from '@activepieces/shared';
import { oktaAuth } from './lib/common/common';
import { createUserAction } from './lib/actions/create-user';
import { activateUserAction } from './lib/actions/activate-user';
import { deactivateUserAction } from './lib/actions/deactivate-user';
import { suspendUserAction } from './lib/actions/suspend-user';
import { addUserToGroupAction } from './lib/actions/add-user-to-group';
import { removeUserFromGroupAction } from './lib/actions/remove-user-from-group';
import { updateUserAction } from './lib/actions/update-user';
import { findUserByEmailAction } from './lib/actions/find-user-by-email';
import { findGroupByNameAction } from './lib/actions/find-group-by-name';
import { newEventTrigger } from './lib/triggers/new-event';
import { createCustomApiCallAction } from '@activepieces/pieces-common';
export const okta = createPiece({
displayName: 'Okta',
auth: oktaAuth,
minimumSupportedRelease: '0.30.0',
logoUrl: 'https://cdn.activepieces.com/pieces/okta.png',
authors: ['Ani-4x', 'sanket-a11y'],
categories: [PieceCategory.PRODUCTIVITY],
actions: [
createUserAction,
activateUserAction,
deactivateUserAction,
suspendUserAction,
addUserToGroupAction,
removeUserFromGroupAction,
updateUserAction,
findUserByEmailAction,
findGroupByNameAction,
createCustomApiCallAction({
baseUrl: (auth) => `${(auth)?.props.domain}/api/v1`,
auth: oktaAuth,
authMapping: async (auth) => ({
Authorization: `SSWS ${(auth).props.apiToken}`,
}),
}),
],
triggers: [newEventTrigger],
});

View File

@@ -0,0 +1,32 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { oktaAuth, makeOktaRequest, userIdDropdown } from '../common/common';
import { HttpMethod } from '@activepieces/pieces-common';
export const activateUserAction = createAction({
auth: oktaAuth,
name: 'activate_user',
displayName: 'Activate User',
description: 'Activate a previously deactivated or pending user',
props: {
userId: userIdDropdown(),
sendEmail: Property.Checkbox({
displayName: 'Send Email',
description: 'Send activation email to user',
required: false,
defaultValue: false,
}),
},
async run(context) {
const userId = context.propsValue.userId;
const sendEmail = context.propsValue.sendEmail ? 'true' : 'false';
const response = await makeOktaRequest(
context.auth,
`/users/${userId}/lifecycle/activate?sendEmail=${sendEmail}`,
HttpMethod.POST
);
return response.body;
},
});

View File

@@ -0,0 +1,33 @@
import { createAction } from '@activepieces/pieces-framework';
import { oktaAuth, makeOktaRequest, userIdDropdown, groupIdDropdown } from '../common/common';
import { HttpMethod } from '@activepieces/pieces-common';
export const addUserToGroupAction = createAction({
auth: oktaAuth,
name: 'add_user_to_group',
displayName: 'Add User to Group',
description: 'Add a user to a specific Okta group',
props: {
userId: userIdDropdown(),
groupId: groupIdDropdown,
},
async run(context) {
const userId = context.propsValue.userId;
const groupId = context.propsValue.groupId;
const response = await makeOktaRequest(
context.auth,
`/groups/${groupId}/users/${userId}`,
HttpMethod.PUT
);
return {
success: true,
userId,
groupId,
message: 'User added to group',
};
},
});

View File

@@ -0,0 +1,65 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { oktaAuth, makeOktaRequest } from '../common/common';
import { HttpMethod } from '@activepieces/pieces-common';
export const createUserAction = createAction({
auth: oktaAuth,
name: 'create_user',
displayName: 'Create User',
description: 'Creates a user without credentials and sends account creation prompt via email',
props: {
firstName: Property.ShortText({
displayName: 'First Name',
description: 'User first name',
required: true,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
description: 'User last name',
required: true,
}),
email: Property.ShortText({
displayName: 'Email',
description: 'User email address',
required: true,
}),
login: Property.ShortText({
displayName: 'Login',
description: 'User login (typically same as email)',
required: false,
}),
mobilePhone: Property.ShortText({
displayName: 'Mobile Phone',
description: 'User mobile phone number',
required: false,
}),
sendEmail: Property.Checkbox({
displayName: 'Send Email',
description: 'Send account creation email to user',
required: false,
defaultValue: true,
}),
},
async run(context) {
const userData = {
profile: {
firstName: context.propsValue.firstName,
lastName: context.propsValue.lastName,
email: context.propsValue.email,
login: context.propsValue.login || context.propsValue.email,
},
};
const queryParam = context.propsValue.sendEmail ? '?activate=true' : '';
const response = await makeOktaRequest(
context.auth,
`/users${queryParam}`,
HttpMethod.POST,
userData
);
return response.body;
},
});

View File

@@ -0,0 +1,32 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { oktaAuth, makeOktaRequest, userIdDropdown } from '../common/common';
import { HttpMethod } from '@activepieces/pieces-common';
export const deactivateUserAction = createAction({
auth: oktaAuth,
name: 'deactivate_user',
displayName: 'Deactivate User',
description: 'Deactivate (disable) a user in Okta',
props: {
userId: userIdDropdown(),
sendEmail: Property.Checkbox({
displayName: 'Send Email',
description: 'Send deactivation email to user',
required: false,
defaultValue: false,
}),
},
async run(context) {
const userId = context.propsValue.userId;
const sendEmail = context.propsValue.sendEmail ? 'true' : 'false';
const response = await makeOktaRequest(
context.auth,
`/users/${userId}/lifecycle/deactivate?sendEmail=${sendEmail}`,
HttpMethod.POST
);
return response.body;
},
});

View File

@@ -0,0 +1,28 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { oktaAuth, makeOktaRequest } from '../common/common';
export const findGroupByNameAction = createAction({
auth: oktaAuth,
name: 'find_group_by_name',
displayName: 'Find Group by Name',
description: 'Search for an Okta group by name',
props: {
groupName: Property.ShortText({
displayName: 'Group Name',
description: 'The group name to search for',
required: true,
}),
},
async run(context) {
const groupName = context.propsValue.groupName;
const response = await makeOktaRequest(
context.auth,
`/groups?q=${encodeURIComponent(groupName)}`
);
return response.body;
},
});

View File

@@ -0,0 +1,43 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { oktaAuth, makeOktaRequest } from '../common/common';
import { HttpMethod } from '@activepieces/pieces-common';
export const findUserByEmailAction = createAction({
auth: oktaAuth,
name: 'find_user_by_email',
displayName: 'Find User by Email',
description: 'Look up an Okta user by their email address',
props: {
domain: Property.ShortText({
displayName: 'Okta Domain',
description: 'Your Okta organization domain',
required: true,
}),
email: Property.ShortText({
displayName: 'Email',
description: 'The user email address',
required: true,
}),
},
async run(context) {
const email = context.propsValue.email;
const response = await makeOktaRequest(
context.auth,
`/users?search=profile.email eq "${email}"`,
HttpMethod.GET,
context.propsValue.domain
);
if (response.body && response.body.length > 0) {
return response.body[0];
}
return {
success: false,
message: `No user found with email: ${email}`,
data: [],
};
},
});

View File

@@ -0,0 +1,36 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import {
oktaAuth,
makeOktaRequest,
userIdDropdown,
groupIdDropdown,
} from '../common/common';
import { HttpMethod } from '@activepieces/pieces-common';
export const removeUserFromGroupAction = createAction({
auth: oktaAuth,
name: 'remove_user_from_group',
displayName: 'Remove User from Group',
description: 'Remove a user from an Okta group',
props: {
groupId: groupIdDropdown,
userId: userIdDropdown(true),
},
async run(context) {
const userId = context.propsValue.userId;
const groupId = context.propsValue.groupId;
const response = await makeOktaRequest(
context.auth,
`/groups/${groupId}/users/${userId}`,
HttpMethod.DELETE
);
return {
success: true,
userId,
groupId,
message: 'User removed from group',
};
},
});

View File

@@ -0,0 +1,25 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { oktaAuth, makeOktaRequest, userIdDropdown } from '../common/common';
import { HttpMethod } from '@activepieces/pieces-common';
export const suspendUserAction = createAction({
auth: oktaAuth,
name: 'suspend_user',
displayName: 'Suspend User',
description: 'Temporarily suspend a user in Okta',
props: {
userId: userIdDropdown(),
},
async run(context) {
const userId = context.propsValue.userId;
const response = await makeOktaRequest(
context.auth,
`/users/${userId}/lifecycle/suspend`,
HttpMethod.POST
);
return response.body;
},
});

View File

@@ -0,0 +1,71 @@
import { createAction, Property } from '@activepieces/pieces-framework';
import { oktaAuth, makeOktaRequest, userIdDropdown } from '../common/common';
import { HttpMethod } from '@activepieces/pieces-common';
export const updateUserAction = createAction({
auth: oktaAuth,
name: 'update_user',
displayName: 'Update User',
description: 'Update user profile information',
props: {
userId: userIdDropdown(),
firstName: Property.ShortText({
displayName: 'First Name',
description: 'Updated first name',
required: false,
}),
lastName: Property.ShortText({
displayName: 'Last Name',
description: 'Updated last name',
required: false,
}),
email: Property.ShortText({
displayName: 'Email',
description: 'Updated email address',
required: false,
}),
mobilePhone: Property.ShortText({
displayName: 'Mobile Phone',
description: 'Updated mobile phone number',
required: false,
}),
customAttributes: Property.Json({
displayName: 'Custom Attributes',
description: 'JSON object with custom profile attributes',
required: false,
}),
},
async run(context) {
const userId = context.propsValue.userId;
const userData: any = {
profile: {},
};
if (context.propsValue.firstName) {
userData.profile.firstName = context.propsValue.firstName;
}
if (context.propsValue.lastName) {
userData.profile.lastName = context.propsValue.lastName;
}
if (context.propsValue.email) {
userData.profile.email = context.propsValue.email;
}
if (context.propsValue.mobilePhone) {
userData.profile.mobilePhone = context.propsValue.mobilePhone;
}
if (context.propsValue.customAttributes) {
userData.profile = { ...userData.profile, ...context.propsValue.customAttributes };
}
const response = await makeOktaRequest(
context.auth,
`/users/${userId}`,
HttpMethod.POST,
userData
);
return response.body;
},
});

View File

@@ -0,0 +1,162 @@
import { PieceAuth } from '@activepieces/pieces-framework';
import { httpClient, HttpMethod } from '@activepieces/pieces-common';
import { Property } from '@activepieces/pieces-framework';
export const oktaAuth = PieceAuth.CustomAuth({
required: true,
props: {
domain: Property.ShortText({
displayName: 'Okta Domain',
description: 'Your Okta organization domain (e.g., https://dev-12345.okta.com or dev-12345.okta.com)',
required: true,
}),
apiToken: Property.ShortText({
displayName: 'API Token',
description: 'Your Okta API token (from Admin → Security → API → Tokens)',
required: true,
}),
},
});
export async function makeOktaRequest(
auth: any,
endpoint: string,
method: HttpMethod = HttpMethod.GET,
body?: any
) {
const apiToken = auth.apiToken;
let domain = auth.domain;
if (!domain) {
throw new Error('Okta domain is required');
}
if (!domain.startsWith('https://') && !domain.startsWith('http://')) {
domain = `https://${domain}`;
}
domain = domain.replace(/\/$/, '');
return await httpClient.sendRequest({
method,
url: `${domain}/api/v1${endpoint}`,
headers: {
'Authorization': `SSWS ${apiToken}`,
'Content-Type': 'application/json',
'Accept': 'application/json',
},
body,
});
}
export const userIdDropdown = (groupusers = false) =>
Property.Dropdown({
auth: oktaAuth,
displayName: 'User',
description: 'Select a user',
required: true,
refreshers: ['auth', 'groupId'],
options: async ({ auth, groupId }) => {
try {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'select auth first',
};
}
if (groupusers && !groupId) {
return {
disabled: true,
options: [],
placeholder: 'please select groupId first',
};
}
const path = groupusers
? `/groups/${groupId}/users`
: '/users';
const response = await makeOktaRequest(
auth,
path,
HttpMethod.GET,
undefined
);
const users = await response.body;
console.log(JSON.stringify(users, null, 2));
if (!Array.isArray(users)) {
return {
disabled: true,
options: [],
placeholder: 'No users found',
};
}
return {
disabled: false,
options: users.map((user: any) => ({
label:
user.profile.firstName +
' ' +
user.profile.lastName +
' (' +
user.profile.email +
')',
value: user.id,
})),
};
} catch (e) {
return {
disabled: true,
options: [],
placeholder: 'Error fetching users',
};
}
},
});
export const groupIdDropdown =
Property.Dropdown({
auth: oktaAuth,
displayName: 'Group',
description: 'Select a group',
required: true,
refreshers: ['auth'],
options: async ({ auth }) => {
try {
if (!auth) {
return {
disabled: true,
options: [],
placeholder: 'No groups found',
};
}
const response = await makeOktaRequest(
auth,
'/groups',
HttpMethod.GET
);
const groups = await response.body;
if (!Array.isArray(groups)) {
return {
disabled: true,
options: [],
placeholder: 'No groups found',
};
}
return {
disabled: false,
options: groups.map((group: any) => ({
label: group.profile.name,
value: group.id,
})),
};
} catch (e) {
return {
disabled: true,
options: [],
placeholder: 'Error fetching groups',
};
}
},
});

View File

@@ -0,0 +1,268 @@
import {
createTrigger,
TriggerStrategy,
Property,
} from '@activepieces/pieces-framework';
import { oktaAuth, makeOktaRequest } from '../common/common';
import { HttpMethod } from '@activepieces/pieces-common';
import { WebhookHandshakeStrategy } from '@activepieces/shared';
export const newEventTrigger = createTrigger({
auth: oktaAuth,
name: 'new_event',
displayName: 'New Event',
description: 'Fires when a new Okta event is generated',
type: TriggerStrategy.WEBHOOK,
props: {
eventTypes: Property.StaticMultiSelectDropdown({
displayName: 'Event Types to Monitor',
description: 'Select which event types to trigger on',
required: false,
options: {
options: [
{ label: 'User Created', value: 'user.lifecycle.create' },
{ label: 'User Activated', value: 'user.lifecycle.activate' },
{ label: 'User Deactivated', value: 'user.lifecycle.deactivate' },
{ label: 'User Suspended', value: 'user.lifecycle.suspend' },
{ label: 'User Unsuspended', value: 'user.lifecycle.unsuspend' },
{ label: 'User Deleted', value: 'user.lifecycle.delete.completed' },
{ label: 'User Added to Group', value: 'group.user_membership.add' },
{
label: 'User Removed from Group',
value: 'group.user_membership.remove',
},
{ label: 'Group Created', value: 'group.lifecycle.create' },
{ label: 'Group Deleted', value: 'group.lifecycle.delete' },
{ label: 'User Login', value: 'user.session.start' },
{ label: 'User Logout', value: 'user.session.end' },
],
},
}),
hookName: Property.ShortText({
displayName: 'Hook Name',
description: 'Name for the Okta Event Hook (optional)',
required: false,
defaultValue: 'Activepieces Webhook',
}),
},
handshakeConfiguration: {
strategy: WebhookHandshakeStrategy.HEADER_PRESENT,
paramName: 'x-okta-verification-challenge',
},
async onHandshake(context) {
const challengeValue =
context.payload.headers['x-okta-verification-challenge'];
if (challengeValue) {
console.log('Okta verification challenge received:', challengeValue);
return {
status: 200,
body: {
verification: challengeValue,
},
headers: {
'Content-Type': 'application/json',
},
};
}
return {
status: 400,
body: { error: 'No verification challenge found' },
};
},
async onEnable(context) {
try {
const eventTypes = context.propsValue.eventTypes || [];
const hookName = context.propsValue.hookName || 'Webhook';
const existingHooks = await makeOktaRequest(
context.auth,
'/eventHooks',
HttpMethod.GET
);
const existingHook = existingHooks.body?.find(
(hook: any) =>
hook.name === hookName &&
hook.channel?.config?.uri === context.webhookUrl
);
let hookId: string;
if (existingHook) {
hookId = existingHook.id;
} else {
const eventHookPayload = {
name: hookName,
events: {
type: 'EVENT_TYPE',
items:
eventTypes.length > 0
? eventTypes
: [
'user.lifecycle.create',
'user.lifecycle.activate',
'user.lifecycle.deactivate',
'user.lifecycle.suspend',
'user.lifecycle.unsuspend',
'user.lifecycle.update',
'user.lifecycle.delete',
'group.user_membership.add',
'group.user_membership.remove',
'group.lifecycle.create',
'group.lifecycle.update',
'group.lifecycle.delete',
'user.session.start',
'user.session.end',
'user.authentication.auth_failed',
],
},
channel: {
type: 'HTTP',
version: '1.0.0',
config: {
uri: context.webhookUrl,
method: 'POST',
},
},
};
const response = await makeOktaRequest(
context.auth,
'/eventHooks',
HttpMethod.POST,
eventHookPayload
);
if (!response.body?.id) {
throw new Error(
'Failed to create event hook: ' + JSON.stringify(response.body)
);
}
hookId = response.body.id;
console.log(`Created new event hook: ${hookId}`);
}
const response = await makeOktaRequest(
context.auth,
`/eventHooks/${hookId}/lifecycle/verify`,
HttpMethod.POST
);
if (response.status !== 200) {
throw new Error(
'Failed to verify event hook: ' + JSON.stringify(response.body)
);
}
} catch (error) {
console.error('Error creating Okta event hook:', error);
throw new Error(`Failed to setup Okta event hook: ${error}`);
}
},
async onDisable(context) {
try {
const hookId = await context.store.get('hookId');
if (hookId) {
try {
await makeOktaRequest(
context.auth,
`/eventHooks/${hookId}/lifecycle/deactivate`,
HttpMethod.POST
);
console.log(`Deactivated event hook: ${hookId}`);
} catch (deactivateError) {
console.warn('Failed to deactivate event hook:', deactivateError);
}
try {
await makeOktaRequest(
context.auth,
`/eventHooks/${hookId}`,
HttpMethod.DELETE
);
console.log(`Deleted event hook: ${hookId}`);
} catch (deleteError) {
console.warn('Failed to delete event hook:', deleteError);
}
}
await context.store.delete('hookId');
} catch (error) {
console.error('Error cleaning up Okta event hook:', error);
}
},
async run(context) {
const payload: any = context.payload.body;
console.log("firstfdsdfsdf",JSON.stringify(payload))
const configuredEventTypes = context.propsValue.eventTypes || [];
if (!payload.data?.events || !Array.isArray(payload.data.events)) {
console.log('No events found in payload, skipping');
return [];
}
const filteredEvents = [];
for (const event of payload.data.events) {
if (configuredEventTypes.length > 0) {
if (!configuredEventTypes.includes(event.eventType)) {
console.log(
`Event type ${event.eventType} not in configured types, skipping`
);
continue;
}
}
filteredEvents.push(event);
}
return filteredEvents;
},
async test(context) {
try {
const response = await makeOktaRequest(
context.auth,
'/logs?limit=1',
HttpMethod.GET
);
return response.body || [];
} catch (error) {
console.error('Test error:', error);
return [];
}
},
sampleData: {
eventId: 'evt_123456789',
timestamp: new Date().toISOString(),
version: '0',
severity: 'INFO',
eventType: 'user.lifecycle.create',
displayMessage: 'User created: user@example.com',
actor: {
id: 'admin123',
type: 'User',
alternateId: 'admin@example.com',
displayName: 'Admin User',
},
outcome: {
result: 'SUCCESS',
reason: '',
},
target: [
{
id: 'user123',
type: 'User',
alternateId: 'user@example.com',
displayName: 'New User',
},
],
},
});