diff --git a/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/.devcontainer.json b/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/.devcontainer.json new file mode 100644 index 000000000..7b55bc144 --- /dev/null +++ b/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/.devcontainer.json @@ -0,0 +1,4 @@ +{ + "image": "ballerina/ballerina-devcontainer:2201.3.2", + "extensions": ["WSO2.ballerina"], +} diff --git a/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/.gitignore b/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/.gitignore new file mode 100644 index 000000000..eb5a316cb --- /dev/null +++ b/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/.gitignore @@ -0,0 +1 @@ +target diff --git a/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/Ballerina.toml b/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/Ballerina.toml new file mode 100644 index 000000000..2d06a0b31 --- /dev/null +++ b/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/Ballerina.toml @@ -0,0 +1,8 @@ +[package] +org = "WSO2" +name = "asgardeo_registration_webhook" +version = "0.1.0" +distribution = "2201.3.2" + +[build-options] +observabilityIncluded = true diff --git a/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/main.bal b/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/main.bal new file mode 100644 index 000000000..e1fec4bd5 --- /dev/null +++ b/petcare-sample/b2c/web-app/petdesk/webhooks/asgardeo_registration_webhook/main.bal @@ -0,0 +1,74 @@ +import ballerinax/trigger.asgardeo; +import ballerina/log; +import ballerinax/salesforce; +import ballerina/http; + +// Create Salesforce client configuration by reading from environment. +configurable string salesforceAppClientId = ?; +configurable string salesforceAppClientSecret = ?; +configurable string salesforceAppRefreshToken = ?; +configurable string salesforceAppRefreshUrl = ?; +configurable string salesforceAppBaseUrl = ?; + +// Using direct-token config for client configuration +salesforce:ConnectionConfig sfConfig = { + baseUrl: salesforceAppBaseUrl, + auth: { + clientId: salesforceAppClientId, + clientSecret: salesforceAppClientSecret, + refreshToken: salesforceAppRefreshToken, + refreshUrl: salesforceAppRefreshUrl + } +}; + +configurable asgardeo:ListenerConfig config = ?; + +listener http:Listener httpListener = new(8090); +listener asgardeo:Listener webhookListener = new(config,httpListener); + +service asgardeo:RegistrationService on webhookListener { + + remote function onAddUser(asgardeo:AddUserEvent event ) returns error? { + + salesforce:Client baseClient = check new (sfConfig); + + log:printInfo(event.toJsonString()); + + json responseData = event.eventData.toJson(); + + map mj = > responseData; + map userClaims = > mj.get("claims"); + + string lastName = userClaims["http://wso2.org/claims/lastname"]; + string firstName = userClaims["http://wso2.org/claims/givenname"]; + string email = userClaims["http://wso2.org/claims/emailaddress"]; + + record {} leadRecord = { + "Company": string `${firstName}_${lastName}`, + "Email": email, + "FirstName": firstName, + "LastName": lastName + }; + + salesforce:CreationResponse|error res = baseClient->create("Lead", leadRecord); + + if res is salesforce:CreationResponse { + log:printInfo("Lead Created Successfully. Lead ID : " + res.id); + } else { + log:printError(msg = res.message()); + } + } + + remote function onConfirmSelfSignup(asgardeo:GenericEvent event ) returns error? { + + log:printInfo(event.toJsonString()); + } + + remote function onAcceptUserInvite(asgardeo:GenericEvent event ) returns error? { + + log:printInfo(event.toJsonString()); + } +} + +service /ignore on httpListener {} +