Commit Graph

748 Commits (53de7b7d605582d02b8cf2b657ba45dfab38b030)

Author SHA1 Message Date
Dimitri Huisman 7d801c560c Improve if statement
Kevin Falcoz 278d74ce6f
Add title attribute on user-panel div
Kevin Falcoz 3fe1dbe881
Add input validation for domain creation
Kevin Falcoz c69f886a73 Update code with ghostwheel42 comments
Kevin Falcoz 3e394faf92
Patch function "Display Name" into admin page
Florent Daigniere b9e614145f there too
Florent Daigniere b7fb8c661a switch to new API
Alexander Graf f809be39bf
supply missing fields argument
Florent Daigniere 7bd1fd3489 fix 2145
Florent Daigniere 98973223fd
reduce TTL to 1d
Florent Daigniere 792893caae change TTL to 1y
Florent Daigniere 671f3e382a Fix 2138: Pin DANE with the full cert
Florent Daigniere 7f89a29790 Fix 2125
Make the caller responsible to know whether the rate-limit code should
be called or not
bors[bot] 3eca813182
Merge
2116: fix 2114: redirect old path r=mergify[bot] a=nextgens

## What type of PR?

bug-fix

## What does this PR do?

Old paths may still be cached in browsers, it's easy enough to redirect them

### Related issue(s)
- close 


Co-authored-by: Florent Daigniere <nextgens@freenetproject.org>
Florent Daigniere c4675e6e75 fix 2114: redirect old path
Dimitri Huisman b4d3d4b3c9 Preparations for 1.9 release.
Dimitri Huisman 51d94b8d14 Fix issue 2102
Florent Daigniere bee6e980e3 doh
Florent Daigniere 58d0faff7f ensure we clear the token on delete()
Florent Daigniere 2b29cfb3f0 fix cleanup_sessions()
Florent Daigniere f0247a2faf Use self where appropriate
Florent Daigniere c161a2c987 syntax
bors[bot] 18865bf03b
Merge
2094: Sessions tweaks r=mergify[bot] a=nextgens

## What type of PR?

bug-fix

## What does this PR do?

- Make all sessions permanent, introduce SESSION_TIMEOUT and PERMANENT_SESSION_LIFETIME.
- Prevent the creation of a session before there is a login attempt
- Ensure that webmail tokens are in sync with sessions

### Related issue(s)
- close  

## Prerequisites
Before we can consider review and merge, please make sure the following list is done and checked.
If an entry in not applicable, you can check it or remove it from the list.

- [x] In case of feature or enhancement: documentation updated accordingly
- [x] Unless it's docs or a minor change: add [changelog](https://mailu.io/master/contributors/workflow.html#changelog) entry file.


Co-authored-by: Florent Daigniere <nextgens@freenetproject.org>
Co-authored-by: Dimitri Huisman <diman@huisman.xyz>
Dimitri Huisman d40be05117 Fix missing edit buttons in alias, relay and fetchmail lists in admin.
Florent Daigniere a28c7f903e do it once
Dimitri Huisman f88daa1e77 Add missing cast to int
Florent Daigniere 5f313310d4 regenerate() shouldn't extend lifetime
Florent Daigniere fe18cf9743 Fix 2080
Ensure that webmail tokens are in sync with sessions
Florent Daigniere 02c93c44f2 Tweak sessions
simplify:
- make all sessions permanent by default
- update the TTL of sessions on access (save always)
- fix session-expiry, modulo 8byte precision
Florent Daigniere ea96a68eb4 don't create a session if we don't have to
Florent Daigniere 346ace5fb3 Make webmail the default action
Dimitri Huisman d76773b1df Also check the SMTP port for webmail/token
Dimitri Huisman f26fa8da84 Fix Webmail token check. Fix Auth-Port for Webmail.
Florent Daigniere 4fffdd95e9 Reduce logging level
Alexander Graf aa1d605665
Merge remote-tracking branch 'upstream/master' into passlib
Alexander Graf cf7914d050
fixed field iteration
Alexander Graf fd5bdc8650
added localized date output
Alexander Graf 0315ed78d9
Merge remote-tracking branch 'upstream/master' into update_deps
bors[bot] 56cbc56df7
Merge
2044: Vault/rspamd: don't return any key for relayed domains r=mergify[bot] a=nextgens

## What type of PR?

enhancement

## What does this PR 

Don't return any key for relayed domains. We may want to revisit this (ARC signing)... but in the meantime it saves from a scary message in rspamd.
    
```signing failure: cannot request data from the vault url: /internal/rspamd/vault/v1/dkim/ ...```


Co-authored-by: Florent Daigniere <nextgens@freenetproject.org>
bors[bot] 78dd13a217
Merge
2042: Add MESSAGE_RATELIMIT_EXEMPTION r=mergify[bot] a=nextgens

## What type of PR?

Enhancement

## What does this PR do?

Add a new knob called ```MESSAGE_RATELIMIT_EXEMPTION```.

### Related issue(s)
- 

## Prerequisites
Before we can consider review and merge, please make sure the following list is done and checked.
If an entry in not applicable, you can check it or remove it from the list.

- [x] In case of feature or enhancement: documentation updated accordingly
- [ ] Unless it's docs or a minor change: add [changelog](https://mailu.io/master/contributors/workflow.html#changelog) entry file.


Co-authored-by: Florent Daigniere <nextgens@freenetproject.org>
Florent Daigniere 6bf1a178b9 Go with ghostwheel42's suggestion
Florent Daigniere b68033eb43 only parse it once
Alexander Graf 82e14f1292
Merge branch 'master' into update_deps
Florent Daigniere dc6e970a7f handle HTTP too
Florent Daigniere bbef4bee27 Don't return any key for relayed domains
We may want to revisit this (ARC signing)... but in the meantime
it saves from a scary message in rspamd

signing failure: cannot request data from the vault url: /internal/rspamd/vault/v1/dkim/ ...
Florent Daigniere 6c6b0b161c Set the right flags on the rate_limit cookie
Florent Daigniere 5714b4f4b0 introduce MESSAGE_RATELIMIT_EXEMPTION
DjVinnii 30d7e72765 Move TZ to Advanced settings
DjVinnii 81e33d3679 Add default TZ to config manager
Alexander Graf 97e79a973f fix sso login button spacing again
Alexander Graf 73ab4327c2 updated database libraries (sqlalchemy etc.)
this is working fine, but introduces a sqlalchemy warning
when using config-import:

  /app/mailu/schemas.py:822:
    SAWarning: Identity map already had an identity for (...),
    replacing it with newly flushed object.
    Are there load operations occurring inside of an event handler
    within the flush?
Alexander Graf ffd99c3fa8 updated flask
ConfigManager should not replace app.config - this is causing trouble
with some other flask modules (swagger).
Updated ConfigManager to only modify app.config and not replace it.
Alexander Graf 56f65d724d update babel
Alexander Graf 8b15820b01 fix sso login button spacing
Alexander Graf 26fb108a3f updated Flask-Login
Alexander Graf 13e6793c9f Merge remote-tracking branch 'upstream/master' into update_deps
Alexander Graf 40cdff4911 updated dnspython
Alexander Graf 8d90a74624 update werkzeug to 1.x
Florent Daigniere f3c93212c6 The Rate-limiter should run after the deny
Alexander Graf 9bc685c30b removed some more whitespace
Alexander Graf 8c31699baf fixed locale selector for no_NB
Alexander Graf 882a27f87c simplified if's and added external link icon
Alexander Graf 3141ffe791 removed some whitespace
Dimitri Huisman 6b16756d92 Fix acessing antispam via sidebar.
Dimitri Huisman 3449b67c86 Process code review remarks PR2023
Dimitri Huisman 8784971b7f Merge rate limiting and failed login logging
Dimitri Huisman 503044ef6e Reintroduce ProxyFix. Use two buttons for logging in.
Dimitri Huisman c42ad8e71e Forgot to include changes for url_for of base.html
Dimitri Huisman fb0f005343 Get rid of complicated prefix logic. Further simplify /static handling and nginx config.
Dimitri Huisman da788ddee3 Merge branch 'fix-sso-1929' of github.com:Diman0/Mailu into fix-sso-1929
Dimitri Huisman bdcc183165 Redirect to configured ENV VAR for Admin/Webmail, further simplify nginx config.
Florent Daigniere fee13e6c4b Save a redirect
Florent Daigniere d3f07a0882 Simplify the handling of /static
Dimitri Huisman a47afec4ee Make logic more readable.
Dimitri Huisman 48764f0400 Ensure all requests from the page sso go through the page sso.
Dimitri Huisman aab258d284 Move handling of logging out in admin, to sso logout page.
Dimitri Huisman 615743b331 Improve indendation of conditions.
Dimitri Huisman 5d81846c5d Introduce the shared stub /static for providing all static files
Dimitri Huisman 44d2448412 Updated SSO logic for webmails. Fixed small bug rate limiting.
Dimitri Huisman ed7adf52a6 Merge branch 'master' of github.com:Diman0/Mailu into fix-sso-1929
bors[bot] a1192d8039
Merge
1987: Enhancement to the rate limits r=mergify[bot] a=nextgens

## What type of PR?

enhancement

## What does this PR do?

Turn the rate-limiters into something useful (that won't fire for no reason).

- fix rate-limiting on /webdav/
- it changes the rate-limiting behaviour from limiting a single IP address to a subnet of a reasonable size (/24 on v4 and /56 on v6 both are now configurable) : AUTH_RATELIMIT_IP / AUTH_RATELIMIT_IP_V4_MASK / AUTH_RATELIMIT_IP_V6_MASK
- It ensures we only use IP-based rate-limits for attempts on accounts that do not exist
- it creates a new rate limit preventing attackers from targetting a specific user account (separate from what's above) : AUTH_RATELIMIT_USER
- it introduces a rate limiting exemption mechanism whereby, upon authentication, users will see their source-ip address being exempt for a specific amount of time AUTH_RATELIMIT_EXEMPTION_LENGTH. A similar mechanism is available for web-based sessions (see below)
- It introduces in AUTH_RATELIMIT_EXEMPTION a comma separated list of network CIDRs that will be exempt from both types of rate limiting
- it implements device-tokens, as described on https://owasp.org/www-community/Slow_Down_Online_Guessing_Attacks_with_Device_Cookies to ensure that genuine users aren't locked-out by a malicious attacker abusing the rate-limit feature.

Things that could be improved include:
- the IP-based rate limiter flags attempts against "non-existing" accounts: it could go further and flag the number of unique non-existing accounts attempted (to prevent the case of a user making a typo in his MUA configuration)
- the IP address exemption mechanism doesn't pin the exemption to a specific username: any real user can trivially bypass the rate limits (and attempt to brute-force someone else's account)

### Related issue(s)
- close 
- close  
- close 


## Prerequisites
Before we can consider review and merge, please make sure the following list is done and checked.
If an entry in not applicable, you can check it or remove it from the list.

- [x] In case of feature or enhancement: documentation updated accordingly
- [x] Unless it's docs or a minor change: add [changelog](https://mailu.io/master/contributors/workflow.html#changelog) entry file.


Co-authored-by: Florent Daigniere <nextgens@freenetproject.org>
Co-authored-by: Diman0 <diman@huisman.xyz>
Co-authored-by: Florent Daigniere <nextgens@users.noreply.github.com>
Florent Daigniere 693b578bbb The second strip isn't necessary
Florent Daigniere 1c6165213c better that way
Florent Daigniere 34497cff20 doh
Florent Daigniere e8871dd77f doh
Florent Daigniere 5b72c32251 Doh
Florent Daigniere 19b784b198 Parse the network configuration only once
thanks @ghostwheel42
Florent Daigniere 98742268e6 Make it more readable
Florent Daigniere 94bbed9746 Ensure we have the right IP
Florent Daigniere c5bd82650f doh
Florent Daigniere 99c81c20a7 Introduce AUTH_RATELIMIT_EXEMPTION
This disables rate limiting on specific CIDRs
Florent Daigniere c674f1567a Merge branch 'ratelimits' of https://github.com/nextgens/Mailu into ratelimits
Florent Daigniere 8414dd5cf0 Merge remote-tracking branch 'upstream/master' into ratelimits
Florent Daigniere e14d2e7c03 Error out explictely if Auth-Port isn't set
Florent Daigniere abaa2e8cc3 simplify client_ip
Florent Daigniere de276a6822 Simplify extract_network_from_ip
Florent Daigniere 3bda8368e4 simplify the Auth-Status check
Florent Daigniere 2dd9ea1506 simplify
Florent Daigniere 068170c0ff Use app instead of flask.current_app where possible
Florent Daigniere 57b0dd490c Initialize user_email in all cases