| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
| |
this is only used in one place, so it's clearer if we inline it and reduce the
API surface.
Also, fixes a buglet where we would create an access token even if we were
about to block the user (we would never return the AT, so the user could never
use it, but it was still created and added to the db.)
|
|\
| |
| | |
Send 3PID bind requests as JSON data
|
| | |
|
| | |
|
|/
|
|
|
| |
The 'token' param is no longer used anywhere except the tests, so let's kill
that off too.
|
|\
| |
| | |
Use JSON when querying the IS's /store-invite endpoint
|
| |\ |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
FederationDeniedError is a subclass of SynapseError, which is a subclass of
CodeMessageException, so if e is a FederationDeniedError, then this check for
FederationDeniedError will never be reached since it will be caught by the
check for CodeMessageException above. The check for CodeMessageException does
almost the same thing as this check (since FederationDeniedError initialises
with code=403 and msg="Federation denied with %s."), so may as well just keep
allowing it to handle this case.
|
|\ \ \
| | | |
| | | | |
Allow newly-registered users to lookup their own profiles
|
| | |/
| |/|
| | |
| | | |
When a user creates an account and the 'require_auth_for_profile_requests' config flag is set, and a client that performed the registration wants to lookup the newly-created profile, the request will be denied because the user doesn't share a room with themselves yet.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Nothing uses this now, so we can remove the dead code, and clean up the
API.
Since we're changing the shape of the return value anyway, we take the
opportunity to give the method a better name.
|
|/ /
| |
| | |
It was pretty unclear what was going on, so I've added a couple of log lines.
|
| |
| |
| | |
This is only used in tests, so...
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
This has never been documented, and I'm not sure it's ever been used outside
sytest.
It's quite a lot of poorly-maintained code, so I'd like to get rid of it.
For now I haven't removed the database table; I suggest we leave that for a
future clearout.
|
| | |
|
| |
| |
| |
| | |
Fixes #5602, #5603
|
|\ \
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
* SAML2 Improvements and redirect stuff
Signed-off-by: Alexander Trost <galexrt@googlemail.com>
* Code cleanups and simplifications.
Also: share the saml client between redirect and response handlers.
* changelog
* Revert redundant changes to static js
* Move all the saml stuff out to a centralised handler
* Add support for tracking SAML2 sessions.
This allows us to correctly handle `allow_unsolicited: False`.
* update sample config
* cleanups
* update sample config
* rename BaseSSORedirectServlet for consistency
* Address review comments
|
| |\ \ |
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | | |
This allows us to correctly handle `allow_unsolicited: False`.
|
| | |/
| |/| |
|
|\ \ \
| |_|/
|/| | |
Fix sync tightloop bug.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
If, for some reason, presence updates take a while to persist then it
can trigger clients to tightloop calling `/sync` due to the presence
handler returning updates but not advancing the stream token.
Fixes #5503.
|
|\ \ \
| | | |
| | | | |
Don't update the ratelimiter before sending a 3PID invite
|
| | | |
| | | |
| | | |
| | | | |
If we do the opposite, an event can arrive after or while sending the email and the 3PID invite event will get ratelimited.
|
| | |/
| |/|
| | |
| | | |
This would cause emails being sent, but Synapse responding with a 429 when creating the event. The client would then retry, and with bad timing the same scenario would happen again. Some testing I did ended up sending me 10 emails for one single invite because of this.
|
| | |
| | |
| | |
| | |
| | | |
Signed-off-by: Daniel Hoffend <dh@dotlan.net>
|
| | | |
|
| | | |
|
| | | |
|
|/ /
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When a client asks for users whose devices have changed since a token we
used to pull *all* users from the database since the token, which could
easily be thousands of rows for old tokens.
This PR changes this to only check for changes for users the client is
actually interested in.
Fixes #5553
|
| |
| |
| |
| |
| |
| |
| | |
Closes #4583
Does slightly less than #5045, which prevented a room from being upgraded multiple times, one after another. This PR still allows that, but just prevents two from happening at the same time.
Mostly just to mitigate the fact that servers are slow and it can take a moment for the room upgrade to actually complete. We don't want people sending another request to upgrade the room when really they just thought the first didn't go through.
|
|\ \
| | |
| | | |
Fix /messages on workers when no from param specified.
|
| |/
| |
| |
| |
| |
| |
| | |
If no `from` param is specified we calculate and use the "current
token" that inlcuded typing, presence, etc. These are unused during
pagination and are not available on workers, so we simply don't
calculate them.
|
| |
| |
| |
| |
| | |
Because sticking it in the same place as the config isn't necessarily the right
thing to do.
|
|/
|
| |
This makes some of the conditional-import hoop-jumping easier.
|
| |
|
|\
| |
| | |
Handle the case of `get_missing_events` failing
|
| | |
|
| |\
| | |
| | |
| | | |
erikj/fix_get_missing_events_error
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Currently if a call to `/get_missing_events` fails we log an exception
and stop processing the top level event we received over federation.
Instead let's try and handle it sensibly given it is a somewhat expected
failure mode.
|
|\ \ \
| | | |
| | | | |
Add experimental option to reduce extremities.
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Adds new config option `cleanup_extremities_with_dummy_events` which
periodically sends dummy events to rooms with more than 10 extremities.
THIS IS REALLY EXPERIMENTAL.
|
| |_|/
|/| |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
I had to add quite a lot of logging to diagnose a problem with 3pid
invites - we only logged the one failure which isn't all that
informative.
NB. I'm not convinced the logic of this loop is right: I think it
should just accept a single valid signature from a trusted source
rather than fail if *any* signature is invalid. Also it should
probably not skip the rest of middle loop if a check fails? However,
I'm deliberately not changing the logic here.
|
| | | |
|
|/ / |
|
|\ \
| | |
| | | |
Handle HttpResponseException when using federation client.
|
| | |
| | |
| | |
| | | |
Otherwise we just log exceptions everywhere.
|
|\ \ \
| | | |
| | | | |
Fix 3PID invite room state over federation.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Fixes that when a user exchanges a 3PID invite for a proper invite over
federation it does not include the `invite_room_state` key.
This was due to synapse incorrectly sending out two invite requests.
|
|\ \ \ \
| | | | |
| | | | | |
Allow server admins to define implementations of extra rules for allowing or denying incoming events
|
| |/ / / |
|
| | | | |
|
|/ / / |
|
|/ / |
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
identity server (#5377)
Sends password reset emails from the homeserver instead of proxying to the identity server. This is now the default behaviour for security reasons. If you wish to continue proxying password reset requests to the identity server you must now enable the email.trust_identity_server_for_password_resets option.
This PR is a culmination of 3 smaller PRs which have each been separately reviewed:
* #5308
* #5345
* #5368
|
| |
| |
| |
| | |
Fixes some warnings, and a scary-looking stacktrace when sytest kills the
process.
|
|\ \
| | |
| | | |
Make /sync return heroes if room name or canonical alias are empty
|
| | | |
|
| | | |
|
| |\ \ |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
I probably should've just run autopep8 in the first place...
Signed-off-by: Katie Wolfe <katie@dnaf.moe>
|
| | | |
| | | |
| | | |
| | | | |
Signed-off-by: Katie Wolfe <katie@dnaf.moe>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Fixes #4194
Signed-off-by: Katie Wolfe <katie@dnaf.moe>
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
Fixes #4194
Signed-off-by: Katie Wolfe <katie@dnaf.moe>
|
|\ \ \ \
| | | | |
| | | | | |
Include left members in room summaries' heroes
|
| | |/ /
| |/| |
| | | |
| | | | |
the joined members or the parted ones
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
* Fix background updates to handle redactions/rejections
In background updates based on current state delta stream we need to
handle that we may not have all the events (or at least that
`get_events` may raise an exception).
|
| | | | |
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When processing an incoming event over federation, we may try and
resolve any unexpected differences in auth events. This is a
non-essential process and so should not stop the processing of the event
if it fails (e.g. due to the remote disappearing or not implementing the
necessary endpoints).
Fixes #3330
|
|\ \ \
| | | |
| | | | |
Limit displaynames and avatar URLs
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
These end up in join events everywhere, so let's limit them.
Fixes #5079
|
| | | |
| | | |
| | | |
| | | |
| | | | |
Fixes #4414.
|
|\ \ \ \
| | | | |
| | | | | |
Don't bundle aggregations with events in /sync or /events or state queries
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
As we'll send down the annotations too anyway, so this just ends up
confusing clients.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
Replaces DEFAULT_ROOM_VERSION constant with a method that first checks the config, then returns a hardcoded value if the option is not present.
That hardcoded value is now located in the server.py config file.
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
I was staring at this function trying to figure out wtf it was actually
doing. This is (hopefully) a non-functional refactor which makes it a bit
clearer.
|
| |/ / /
|/| | | |
|
|\ \ \ \
| | | | |
| | | | | |
Block attempts to annotate the same event twice
|
| | | | | |
|
| |/ / / |
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
When considering the candidates to be forward-extremities, we must exclude soft
failures.
Hopefully fixes #5090.
|
| | | |
|
| | |
| | |
| | | |
* fix mapping of return values for get_or_register_3pid_guest
|
| | | |
|
| | |
| | |
| | |
| | | |
users (#3484)
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
CS API (#5083)
This commit adds two config options:
* `restrict_public_rooms_to_local_users`
Requires auth to fetch the public rooms directory through the CS API and disables fetching it through the federation API.
* `require_auth_for_profile_requests`
When set to `true`, requires that requests to `/profile` over the CS API are authenticated, and only returns the user's profile if the requester shares a room with the profile's owner, as per MSC1301.
MSC1301 also specifies a behaviour for federation (only returning the profile if the server asking for it shares a room with the profile's owner), but that's currently really non-trivial to do in a not too expensive way. Next step is writing down a MSC that allows a HS to specify which user sent the profile query. In this implementation, Synapse won't send a profile query over federation if it doesn't believe it already shares a room with the profile's owner, though.
Groups have been intentionally omitted from this commit.
|
| | |
| | |
| | |
| | |
| | | |
Follow-up to #5124
Also added a bunch of checks to make sure everything (both the stuff added on #5124 and this PR) works as intended.
|
|\ \ \
| | | |
| | | | |
Ratelimit 3pid invites
|
| | | | |
|
| |\ \ \
| | | | |
| | | | |
| | | | | |
erikj/ratelimit_3pid_invite
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
We do ratelimit sending the 3PID invite events, but that happens after
spamming the identity server.
|
| |/ / /
|/| | | |
|
| |/ /
|/| |
| | |
| | | |
Fixes #5102
|
|\ \ \
| | | |
| | | |
| | | | |
babolivier/account_expiration
|
| |\ \ \
| | |_|/
| |/| | |
Send out emails with links to extend an account's validity period
|
| | |/
| |/| |
|
| | |
| | |
| | | |
Prevent kick events from succeeding if the user is not currently in the room.
|
| | | |
|
| | |
| | |
| | | |
Remove presence list support as per MSC 1819
|
| |\ \
| | | |
| | | | |
Implement MSC1915 - 3PID unbind APIs
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
By default the homeserver will use the identity server used during the
binding of the 3PID to unbind the 3PID. However, we need to allow
clients to explicitly ask the homeserver to unbind via a particular
identity server, for the case where the 3PID was bound out of band from
the homeserver.
Implements MSC915.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This changes the behaviour from using the server specified trusted
identity server to using the IS that used during the binding of the
3PID, if known.
This is the behaviour specified by MSC1915.
|
| | | |
| | | |
| | | |
| | | |
| | | | |
This will then be used to know which IS to default to when unbinding the
threepid.
|
| | | |
| | | |
| | | | |
Transfers the m.room.related_groups state event on room upgrade.
|
| |/ /
| | |
| | |
| | | |
Collect all the things that make room-versions different to one another into
one place, so that it's easier to define new room versions.
|
| | |
| | |
| | | |
This PR allows password provider modules to bind email addresses when a user is registering and is motivated by matrix-org/matrix-synapse-ldap3#58
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Primarily this fixes a bug in the handling of remote users joining a
room where the server sent out the presence for all local users in the
room to all servers in the room.
We also change to using the state delta stream, rather than the
distributor, as it will make it easier to split processing out of the
master process (as well as being more flexible).
Finally, when sending presence states to newly joined servers we filter
out old presence states to reduce the number sent. Initially we filter
out states that are offline and have a last active more than a week ago,
though this can be changed down the line.
Fixes #3962
|
| |/
|/| |
|
|/ |
|
|
|
|
|
| |
Adds a new method, check_3pid_auth, which gives password providers
the chance to allow authentication with third-party identifiers such
as email or msisdn.
|
| |
|
|\
| |
| | |
Deny peeking into rooms that have been blocked
|
| | |
|
|\|
| |
| | |
Fixup shutdown room API
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| |
| |
| |
| |
| |
| | |
There are a number of instances where a server or admin may puppet a
user to join/leave rooms, which we don't want to fail if the user has
not consented to the privacy policy. We fix this by adding a check to
test if the requester has an associated access_token, which is used as a
proxy to answer the question of whether the action is being done on
behalf of a real request from the user.
|
|\ \
| |/
|/| |
Add option to disable search room lists
|
| | |
|
| | |
|
| | |
|
| |
| |
| |
| | |
This disables both local and remote room list searching.
|
|/
|
|
| |
Rate-limit outgoing read-receipts as per #4730.
|
| |
|
| |
|
| |
|
|
|
| |
Add two ratelimiters on login (per-IP address and per-userID).
|
|\
| |
| | |
Move client receipt processing to federation sender worker.
|
| |
| |
| |
| |
| | |
This is mostly a prerequisite for #4730, but also fits with the general theme
of "move everything off the master that we possibly can".
|
| |
| |
| |
| |
| | |
I'm going to use this in queues and things, so it'll be useful to give it more
of a structure.
|
|\ \
| |/
|/| |
Improve searching in the userdir
|
| | |
|
| | |
|
| | |
|
| | |
|
|/
|
| |
Transfer push rules (notifications) on room upgrade
|
|\
| |
| |
| | |
erikj/soft_fail_impl
|
| |\
| | |
| | | |
When re-syncing device lists reset the state
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
We keep track of what stream IDs we've seen so that we know what updates
we've handled or missed. If we re-sync we don't know if the updates
we've seen are included in the re-sync (there may be a race), so we
should reset the seen updates.
|
| |/ |
|
| | |
|
| |\
| | |
| | | |
Add docstrings from matrix-org-hotfixes
|
| | | |
|
| |/ |
|
| | |
|
| |
| |
| |
| | |
This reverts commit d7dbad3526136cfc9fdbd568635be5016fb637db.
|
| | |
|
| | |
|
|/ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* Rate-limiting for registration
* Add unit test for registration rate limiting
* Add config parameters for rate limiting on auth endpoints
* Doc
* Fix doc of rate limiting function
Co-Authored-By: babolivier <contact@brendanabolivier.com>
* Incorporate review
* Fix config parsing
* Fix linting errors
* Set default config for auth rate limiting
* Fix tests
* Add changelog
* Advance reactor instead of mocked clock
* Move parameters to registration specific config and give them more sensible default values
* Remove unused config options
* Don't mock the rate limiter un MAU tests
* Rename _register_with_store into register_with_store
* Make CI happy
* Remove unused import
* Update sample config
* Fix ratelimiting test for py2
* Add non-guest test
|
|\
| |
| | |
Stop backpaginating when events not visible
|
| | |
|
| |
| |
| |
| |
| |
| | |
When filtering events to send to server we check more than just history
visibility. However when deciding whether to backfill or not we only
care about the history visibility.
|
| | |
|
| |\
| | |
| | |
| | | |
erikj/stop_fed_not_in_room
|
| | | |
|
| | | |
|
|\ \ \
| | | |
| | | | |
Allow /keys/{changes,query} API to run on worker
|
| | | | |
|
| | | | |
|
|/ / /
| | |
| | |
| | |
| | |
| | |
| | | |
Remove a call to run_as_background_process: there is no need to run this as a
background process, because build_and_send_edu does not block.
We may as well inline the whole of _push_remotes.
|
| |/
|/|
| |
| |
| | |
In worker mode, on the federation sender, when we receive an edu for sending
over the replication socket, it is parsed into an Edu object. There is no point
extracting the contents of it so that we can then immediately build another Edu.
|
| |
| |
| | |
We were logging this when it was not true.
|
|\ \
| | |
| | |
| | | |
anoa/public_rooms_federate_develop
|
| | | |
|
| |\ \
| | | |
| | | | |
Config option to prevent showing non-fed rooms in fed /publicRooms
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | | | |
|
| | |\ \
| | | | |
| | | | |
| | | | | |
anoa/public_rooms_federate
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
* add trivial clarification about jemalloc
* switch from google.com to recaptcha.net
because https://developers.google.com/recaptcha/docs/faq#can-i-use-recaptcha-globally
|
| |\ \ \ \
| | | | | |
| | | | | | |
Log tracebacks correctly
|
| | | |/ /
| | |/| | |
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| |/ / / |
|
| | | |
| | | |
| | | | |
I suspect the CPU usage metrics for this are going to /dev/null at the moment.
|
| |\ \ \
| | |_|/
| |/| | |
Prevent crash on pagination.
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
* Move RegistrationHandler init to HomeServer
* Move post registration actions to RegistrationHandler
* Add post regisration replication endpoint
* Newsfile
|
| |\ \ \
| | | | |
| | | | | |
Support .well-known delegation when issuing certificates through ACME
|
| | | | | |
|
| | | | | |
|
| | |\ \ \ |
|
| | | | | |
| | | | | |
| | | | | | |
Co-Authored-By: babolivier <contact@brendanabolivier.com>
|
| | | | | | |
|
| | | | | | |
|
| | | | | | |
|
| |\ \ \ \ \
| | | | | | |
| | | | | | | |
Transfer bans on room upgrade
|
| | | | | | | |
|
| | | | | | | |
|
| | | | | | | |
|
| | |/ / / / |
|
| |\ \ \ \ \
| | | | | | |
| | | | | | | |
Split out registration to worker
|
| | | | | | | |
|
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | |
| | | | | | | |
This allows registration to be handled by a worker, though the actual
write to the database still happens on master.
Note: due to the in-memory session map all registration requests must be
handled by the same worker.
|
| |\ \ \ \ \ \
| | | | | | | |
| | | | | | | | |
Correctly handle HttpResponseException when handling device updates
|
| | | | | | | | |
|
| | | |_|/ / /
| | |/| | | | |
|
| |\ \ \ \ \ \
| | |/ / / / /
| |/| | | | | |
Fix kicking guest users in worker mode
|
| | |/ / / /
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | |
| | | | | | |
When guest_access changes from allowed to forbidden all local guest
users should be kicked from the room. This did not happen when
revocation was received from federation on a worker.
Presumably broken in #4141
|
| |\ \ \ \ \
| | |/ / / /
| |/| | | | |
Correctly handle RequestSendFailed exceptions
|
| | |/ / /
| | | | |
| | | | |
| | | | | |
This mainly reduces the number of exceptions we log.
|
| | | | | |
|
| |/ / /
| | | |
| | | |
| | | |
| | | | |
This allows specifying who and what is allowed to be published onto the
public room list
|
| | | | |
|
| |\ \ \
| | | | |
| | | | | |
Transfer Server ACLs on room upgrade
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | | |
also add tests
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| |/ / / |
|
| |\ \ \
| | | | |
| | | | | |
Copy over non-federatable trait on room upgrade
|
| | | | | |
|
| | |\ \ \
| | | | | |
| | | | | |
| | | | | | |
anoa/room_upgrade_federatable
|
| | | | | | |
|
| | | | | | |
|
| | |/ / /
| |/| | |
| | | | | |
I can't figure out what's going on with #4422 and #4436; perhaps this will help.
|
| |/ / /
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This was broken in PR #4405, commit 886e5ac, where we changed remote
rejections to be outliers.
The fix is to explicitly add the leave event in when we know its an out
of band invite. We can't always add the event as if the server is/was in
the room there might be more events to send down the sync than just the
leave.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
* Handle listening for ACME requests on IPv6 addresses
the weird url-but-not-actually-a-url-string doesn't handle IPv6 addresses
without extra quoting. Building a string which you are about to parse again
seems like a weird choice. Let's just use listenTCP, which is consistent with
what we do elsewhere.
* Clean up the default ACME config
make it look a bit more consistent with everything else, and tweak the defaults
to listen on port 80.
* newsfile
|
| | | | |
|
| |\ \ \
| | | | |
| | | | |
| | | | | |
erikj/redactions_eiah
|