narrow-hospital-35452
11/14/2024, 6:40 AMbrief-egg-61061
11/14/2024, 6:40 AMbrief-egg-61061
11/14/2024, 6:40 AMctx.request_headers. This suggests that you could potentially use these headers to create conditional logic within your webhook configuration.  For example, you might be able to create a condition in your Jsonnet template that checks for the presence or value of a specific header:  jsonnet function(ctx) {   if "Your-Custom-Header" in ctx.request_headers then     // Trigger webhook logic here   else     // Don't trigger or handle differently }  However, it's important to note that the exact implementation details for header-based conditions in Kratos webhooks are not explicitly outlined in the provided knowledge sources. For the most up-to-date and accurate information, you may want to consult the latest Ory Kratos documentation or reach out to Ory support for specific guidance on implementing header-based conditions for webhooks.narrow-hospital-35452
11/14/2024, 6:44 AMsettings flow only executed if the phone number is changed?brief-egg-61061
11/14/2024, 6:44 AMbrief-egg-61061
11/14/2024, 6:44 AMsettings flow when the phone number is changed, you can use the webhook configuration options and Jsonnet templating. Here's how you can approach this:  1. First, set up a webhook for the settings flow in your Ory Kratos configuration. According to the [Ory Actions documentation](https://www.ory.sh/docs/kratos/hooks/configure-hooks#action-triggers), you can configure actions for the after settings flow.  2. In your webhook configuration, you can use Jsonnet templating to define the condition for executing the webhook. The [webhook configuration overview](https://www.ory.sh/docs/guides/integrate-with-ory-cloud-through-webhooks#configuration-overview) shows that you can use a body field with a Jsonnet template.  3. In your Jsonnet template, you can access the flow data and check if the phone number has changed. Here's an example of how your webhook configuration might look:  yaml hook: web_hook config:   url: <https://your-webhook-url.com>   method: POST   body: |     function(ctx) {       local old_phone = ctx.flow.identity.traits.phone;       local new_phone = ctx.flow.ui.nodes.attributes.value;       if old_phone != new_phone then         {           // Your webhook payload here           "phone_changed": true,           "old_phone": old_phone,           "new_phone": new_phone         }       else         null  // Return null to prevent webhook execution     }  In this configuration: - We define a function that takes the context (ctx) as an argument. - We compare the old phone number (ctx.flow.identity.traits.phone) with the new phone number (ctx.flow.ui.nodes.attributes.value). - If they're different, we return a payload (which you can customize). - If they're the same, we return null, which should prevent the webhook from being executed.  Please note that the exact structure of ctx.flow might vary, and you may need to adjust the paths to access the old and new phone numbers based on your specific identity schema and flow configuration.  Remember to test this configuration thoroughly in a non-production environment first, as the exact implementation details may depend on your specific Ory Kratos version and configuration.  For more detailed information on configuring webhooks and using Jsonnet templates, refer to the [Ory documentation on triggering custom logic and integrating with external systems through webhooks](https://www.ory.sh/docs/guides/integrate-with-ory-cloud-through-webhooks).narrow-hospital-35452
11/14/2024, 5:57 PMbefore / after what is the possibility options after thatbrief-egg-61061
11/14/2024, 5:57 PMbrief-egg-61061
11/14/2024, 5:57 PMbefore and after options.   According to the [Ory Actions documentation](https://www.ory.sh/docs/kratos/hooks/configure-hooks#action-triggers), Ory Identities supports several action triggers for both before and after scenarios. Here are the possibilities:  1. Login:    - before login    - after login  2. Registration:    - before registration    - after registration  3. Recovery:    - before recovery    - after recovery  4. Settings:    - before settings    - after settings  5. Verification:    - before verification    - after verification  Additionally, for some flows, you can further customize the triggers based on the authentication method used. The [documentation on triggers based on authentication methods](https://www.ory.sh/docs/kratos/hooks/configure-hooks#triggers-based-on-authentication-methods) lists the following options:  - `password`: For sign-in and sign-up with username/email and password combination. - `oidc`: For sign-in and sign-up through OIDC-compliant OAuth2 identity providers. - `totp`: For MFA sign-in with a TOTP code (e.g., Google Authenticator). - `webauthn`: For MFA sign-in with WebAuthn-compatible factors or passwordless sign-up and sign-in. - `lookup_secret`: For MFA sign-in with recovery codes.  For example, you could configure a webhook to trigger after login specifically for the password method:  yaml selfservice:   flows:     login:       after:         password:           hooks:             - hook: web_hook               config:                 # Your webhook configuration here  It's important to note that the exact configuration and available options may depend on your specific Ory Identities version and setup. Always refer to the most recent documentation for the most accurate and up-to-date information.narrow-hospital-35452
12/02/2024, 10:21 AMerror=map[message:jsonnetsecure: ERROR: file:///opt/ory/kratos/files/templates/jsonnet/webhook-metadata-register-body.jsonnet:3:38-39 Expected token IDENTIFIER but got "["
my jsonnet
function(ctx) {
  user_id: ctx.identity.id,
  registered_on: ctx.request_headers.['Origin'][0]
}brief-egg-61061
12/02/2024, 10:21 AMbrief-egg-61061
12/02/2024, 10:22 AMrequest_headers object. Let's correct the syntax:  jsonnet function(ctx) {   user_id: ctx.identity.id,   registered_on: ctx.request_headers['Origin'][0] }  The issue was with the extra dot (.) before the square brackets when accessing request_headers['Origin']. In Jsonnet, you don't need the dot when using square bracket notation to access object properties.  Here's a breakdown of the correct syntax:  1. `ctx.request_headers`: This is correct, as you're accessing the request_headers property of the ctx object. 2. `['Origin']`: This is the correct way to access a property using square bracket notation in Jsonnet. 3. `[0]`: This is correct if you're trying to access the first element of the 'Origin' header array.  Remember that according to the [Ory documentation on customizing request body with Jsonnet](https://www.ory.sh/docs/guides/integrate-with-ory-cloud-through-webhooks#customizing-request-body-with-jsonnet), request headers are available via ctx.request_headers.  If you're still encountering issues after making this change, you might want to double-check that the 'Origin' header is indeed present in the request. If you're unsure, you could add some error handling:  jsonnet function(ctx) {   user_id: ctx.identity.id,   registered_on: if 'Origin' in ctx.request_headers then ctx.request_headers['Origin'][0] else null }  This version will set registered_on to null if the 'Origin' header is not present, preventing potential errors.  For more information on Jsonnet syntax and usage in Ory, you can refer to the [Ory Kratos Jsonnet reference documentation](https://www.ory.sh/docs/kratos/reference/jsonnet).narrow-hospital-35452
12/02/2024, 10:23 AMbrief-egg-61061
12/02/2024, 10:23 AMbrief-egg-61061
12/02/2024, 10:24 AMnull when the 'Origin' header is not present. Here's the updated version:  jsonnet function(ctx) {   user_id: ctx.identity.id,   registered_on: if 'Origin' in ctx.request_headers then ctx.request_headers['Origin'][0] else '' }  In this updated code:  - We're still using the conditional check if 'Origin' in ctx.request_headers to see if the 'Origin' header exists. - If the 'Origin' header is present, we return the first element of the array with ctx.request_headers['Origin'][0]. - If the 'Origin' header is not present, we now return an empty string '' instead of null.  This approach ensures that the registered_on field will always have a string value, either containing the origin information or an empty string if the header is not available.  Remember to test this in your development environment to ensure it works as expected with your specific Ory Kratos setup and version. If you need more information on working with Jsonnet in Ory Kratos, you can refer to the [Ory Kratos Jsonnet reference documentation](https://www.ory.sh/docs/kratos/reference/jsonnet).narrow-hospital-35452
12/02/2024, 10:34 AMctx on syslogbrief-egg-61061
12/02/2024, 10:34 AMbrief-egg-61061
12/02/2024, 10:34 AMctx object to syslog in Ory Kratos, you can use Jsonnet's std.trace function. This function allows you to print debug information while executing the Jsonnet template. However, it's important to note that Ory Kratos doesn't directly write to syslog, but it does output logs which can be captured and forwarded to syslog if needed.  Here's how you can modify your Jsonnet template to print the ctx object:  jsonnet function(ctx) {   local debugCtx = std.trace('Debug ctx: ' + std.toString(ctx), ctx),   user_id: debugCtx.identity.id,   registered_on: if 'Origin' in debugCtx.request_headers then debugCtx.request_headers['Origin'][0] else '' }  In this code:  1. We use std.trace() to print the entire ctx object. 2. std.toString(ctx) converts the ctx object to a string representation. 3. The local debugCtx = ... line assigns the result of std.trace() back to a local variable, which we then use in the rest of the function.  This will print the entire ctx object to the Kratos logs. You can then configure your system to forward these logs to syslog if needed.  To view these logs, you'll need to set the appropriate log level in your Kratos configuration. According to the [Ory Kratos debug documentation](https://www.ory.sh/docs/kratos/debug/troubleshooting), you can set the log level to "trace" for the most detailed output:  yaml log:   level: trace  Remember that printing the entire ctx object may include sensitive information, so be cautious about using this in a production environment. It's best to use this debugging technique in a controlled, non-production environment.  For more information on debugging and logging in Ory Kratos, you can refer to the [Ory Kratos troubleshooting guide](https://www.ory.sh/docs/kratos/debug/troubleshooting).narrow-hospital-35452
12/02/2024, 11:10 AMOrigin I want to use the Referer
but the example value is <https://aaaa.example.com/register>
I want only the value <https://aaaa.example.com>
how to do that on jsonnet request body?brief-egg-61061
12/02/2024, 11:10 AMbrief-egg-61061
12/02/2024, 11:10 AMReferer header instead of Origin and extract only the base URL (without the path) from the Referer value, you can modify your Jsonnet code to parse and manipulate the URL string. Here's how you can do this:  jsonnet local parseUrl(url) =   local parts = std.split(url, '/');   if std.length(parts) >= 3 then     parts[0] + '//' + parts[2]   else     '';  function(ctx) {   user_id: ctx.identity.id,   registered_on:      if 'Referer' in ctx.request_headers then       parseUrl(ctx.request_headers['Referer'][0])     else       '' }  Let's break down this code:  1. We define a local function parseUrl that takes a URL string as input. 2. The function splits the URL by '/' and checks if it has at least 3 parts (protocol, empty string after '://', and domain). 3. If it does, it reconstructs the base URL using the protocol (parts[0]) and the domain (parts[2]). 4. In the main function, we check if 'Referer' exists in the request headers. 5. If it does, we apply our parseUrl function to the first element of the Referer header array. 6. If 'Referer' doesn't exist, we return an empty string as the default value.  This approach will handle URLs like <https://aaaa.example.com/register> and return <https://aaaa.example.com>. It also handles cases where the Referer header might not be present or might have an unexpected format.  Remember to test this thoroughly in your development environment to ensure it works as expected with your specific Ory Kratos setup and the actual format of your Referer headers.  For more information on working with Jsonnet in Ory Kratos, you can refer to the [Ory Kratos Jsonnet reference documentation](https://www.ory.sh/docs/kratos/reference/jsonnet).