File

mod_sentry/README.md @ 6110:1a6cd0bbb7ab

mod_compliance_2023: Add 2023 Version of the compliance module, basis is the 2021 Version. diff --git a/mod_compliance_2023/README.md b/mod_compliance_2023/README.md new file mode 100644 --- /dev/null +++ b/mod_compliance_2023/README.md @@ -0,0 +1,22 @@ +--- +summary: XMPP Compliance Suites 2023 self-test +labels: +- Stage-Beta +rockspec: + dependencies: + - mod_cloud_notify + +... + +Compare the list of enabled modules with +[XEP-0479: XMPP Compliance Suites 2023] and produce basic report to the +Prosody log file. + +If installed with the Prosody plugin installer then all modules needed for a green checkmark should be included. (With prosody 0.12 only [mod_cloud_notify] is not included with prosody and we need the community module) + +# Compatibility + + Prosody-Version Status + --------------- ---------------------- + trunk Works as of 2024-12-21 + 0.12 Works diff --git a/mod_compliance_2023/mod_compliance_2023.lua b/mod_compliance_2023/mod_compliance_2023.lua new file mode 100644 --- /dev/null +++ b/mod_compliance_2023/mod_compliance_2023.lua @@ -0,0 +1,79 @@ +-- Copyright (c) 2021 Kim Alvefur +-- +-- This module is MIT licensed. + +local hostmanager = require "core.hostmanager"; + +local array = require "util.array"; +local set = require "util.set"; + +local modules_enabled = module:get_option_inherited_set("modules_enabled"); + +for host in pairs(hostmanager.get_children(module.host)) do + local component = module:context(host):get_option_string("component_module"); + if component then + modules_enabled:add(component); + modules_enabled:include(module:context(host):get_option_set("modules_enabled", {})); + end +end + +local function check(suggested, alternate, ...) + if set.intersection(modules_enabled, set.new({suggested; alternate; ...})):empty() then return suggested; end + return false; +end + +local compliance = { + array {"Server"; check("tls"); check("disco")}; + + array {"Advanced Server"; check("pep", "pep_simple")}; + + array {"Web"; check("bosh"); check("websocket")}; + + -- No Server requirements for Advanced Web + + array {"IM"; check("vcard_legacy", "vcard"); check("carbons"); check("http_file_share", "http_upload")}; + + array { + "Advanced IM"; + check("vcard_legacy", "vcard"); + check("blocklist"); + check("muc"); + check("private"); + check("smacks"); + check("mam"); + check("bookmarks"); + }; + + array {"Mobile"; check("smacks"); check("csi_simple", "csi_battery_saver")}; + + array {"Advanced Mobile"; check("cloud_notify")}; + + array {"A/V Calling"; check("turn_external", "external_services", "turncredentials", "extdisco")}; + +}; + +function check_compliance() + local compliant = true; + for _, suite in ipairs(compliance) do + local section = suite:pop(1); + if module:get_option_boolean("compliance_" .. section:lower():gsub("%A", "_"), true) then + local missing = set.new(suite:filter(function(m) return type(m) == "string" end):map(function(m) return "mod_" .. m end)); + if suite[1] then + if compliant then + compliant = false; + module:log("warn", "Missing some modules for XMPP Compliance 2023"); + end + module:log("info", "%s Compliance: %s", section, missing); + end + end + end + + if compliant then module:log("info", "XMPP Compliance 2023: Compliant ✔️"); end +end + +if prosody.start_time then + check_compliance() +else + module:hook_global("server-started", check_compliance); +end +
author Menel <menel@snikket.de>
date Sun, 22 Dec 2024 16:06:28 +0100
parent 4294:ae8191d9d533
line wrap: on
line source

---
labels:
- 'Stage-Beta'
summary: 'Send errors to a Sentry server'
rockspec:
  build:
    modules:
      mod_sentry.sentry: sentry.lib.lua
---

# Introduction

This module forwards select events to a [Sentry](https://sentry.io/) server.

# Configuration

There is a single configuration option, `sentry`, which should be a table
containing the following parameters (optional unless otherwise stated):

`dsn`
: **Required.** The DSN of the project in Sentry.

`insecure`
: Whether to allow untrusted HTTPS certificates.

`server_name`
: The name of the current server (defaults to the system hostname).

`tags`
: An optional table of tags that will be used as the default for all
  events from this module.

`extra`
: An optional table of custom extra data to attach to all events from
  this module.

Example configuration:

```
sentry = {
    dsn = "https://37iNFnR4tferFhoTPNe8X0@example.com/11";
    tags = {
        environment = "prod";
    };
}
```

## Log forwarding

You can configure log messages to be automatically forwarded to Sentry.
This example will send all "warn" and "error" messages to Sentry, while
sending all "info" and higher messages to syslog:

```
log = {
    info = "*syslog";
    { levels = "warn", to = "sentry" };
}
```

# Developers

In addition to the automatic log forwarder, you can integrate Sentry
forwarding directly into modules using the API.

## API

Usage example:

```
local sentry = module:depends("sentry").new({
	logger = module.name;
});

sentry:event("warning")
	:message("This is a sample warning")
	:send();
```

### Events

Event objects have a number of methods you can call to add data to them.
All methods return the event itself, which means you can chain multiple
calls together for convenience.

After attaching all the data you want to include in the event, simply
call `event:send()` to submit it to the server.

#### set(key, value)

Directly set a property of the event to the given value.

#### tag(name, value)

Set the specified tag to the given value.

May also be called with a table of key/value pairs.

#### extra(name, value)

Sets the specified 'extra' data. May also be called
with a table of key/value pairs.

#### message(text)

Sets the message text associated with the event.

#### set_request(request)

Sets the HTTP request associated with the event.

This is used to indicate what incoming HTTP request
was being processed at the time of the event.

#### add_exception(e)

Accepts an error object (from util.error or any arbitrary value)
and attempts to map it to a Sentry exception.

May be called multiple times on the same event, to represent
nested exceptions (the outermost exception should be added first).

#### add_breadcrumb(timestamp, type, category, message, data)

Add a breadcrumb to the event. A breadcrumb represents any useful
piece of information that led up to the event. See Sentry documentation
for allowable types and categories.

#### add_http_request_breadcrumb(request, message)

Helper to add a breadcrumb representing a HTTP request that was made.

The `message` parameter is an optional human-readable text description
of the request.

#### send()

Sends the event to the Sentry server. Returns a promise that resolves
to the response from the server.