-
Notifications
You must be signed in to change notification settings - Fork 401
MSC4175: Profile field for user time zone #4175
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
clokep
wants to merge
8
commits into
main
Choose a base branch
from
clokep/profile-tz
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
+127
−0
Open
Changes from 7 commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
7340a2f
MSC4175: Profile field for user time zone
clokep 68105db
Expand security section.
clokep 416bb7e
Fix typos.
clokep 30701f0
Updates.
clokep 1179248
Update with concerns
clokep 99591dc
Add additional required info
clokep 32f4ec6
Typo fix
clokep 0bcd686
Review comments.
clokep File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
# MSC4175: Profile field for user time zone | ||
|
||
Knowing another user's time zone is useful for knowing whether they are likely | ||
to respond or not. Example uses include: | ||
|
||
* Showing a user's time zone or time zone offset directly. | ||
* Showing a user's local time (with hints of whether it is day or night there). | ||
|
||
|
||
## Proposal | ||
|
||
Profiles can provide an optional `m.tz` field with values equal to names from the | ||
[IANA Time Zone Database](https://www.iana.org/time-zones). | ||
Clients can set and fetch this via the [normal API endpoints](https://spec.matrix.org/unstable/client-server-api/#profiles). | ||
|
||
* Servers MAY validate that the value is a valid IANA time zone. If deemed invalid | ||
they MUST return a 400 error with error code `M_INVALID_PARAM`. | ||
* Clients MUST handle invalid or unknown values. | ||
clokep marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
The rationale for somewhat loose validation is that different clients/servers may have | ||
different understanding of valid time zones, e.g. different versions of the time zone | ||
database. | ||
|
||
If the field is not provided it SHOULD be interpreted as having no time zone information | ||
for that user. | ||
|
||
|
||
## Potential issues | ||
|
||
Clients may need to understand IANA time zone names to show useful information to users. | ||
clokep marked this conversation as resolved.
Show resolved
Hide resolved
|
||
Some languages make this easy, e.g. JavaScript can handle this using | ||
[`Date.toLocaleString()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleString). | ||
This may cause clients to bundle the IANA time zone database (and thus also keep it | ||
up to date). | ||
|
||
Using the IANA time zone name has the downside that it does now allow arbitrary offsets, | ||
which may be required for time zones which are not internationally recognized. | ||
|
||
Clients will need to manually update the profile field when the user changes time zone. | ||
This could be automated by clients based on location, or left as a manual change to | ||
users. | ||
|
||
Clients may wish to periodically fetch the time one of other users as it is | ||
liable to change somewhat frequently. Currently, profile data isn't propagated/synchronized | ||
between servers, but that's left to a future MSC to solve. It is recommended that | ||
clients cache the value for 12 - 24 hours. | ||
|
||
There should not be backwards compatibility concerns since clients should be ignoring | ||
unknown profile fields. | ||
|
||
|
||
## Alternatives | ||
|
||
The time zone offset could be included directly (in minutes/seconds or in `[+-]HH:MM` form). | ||
This would require clients to manually update the profile field during daylight | ||
savings. Using the IANA time zone name is robust against this. | ||
|
||
|
||
### Delegate profile fields | ||
|
||
There are several standards related to storing of contact information electronically, | ||
notably vCard and its derivatives (see below). It is unclear if Matrix profile | ||
information is similar enough to the contact information found in vCard to warrant using | ||
that format directly, although there is certainly some overlap. | ||
|
||
Some of the JSON formats for vCard which include time zone information are detailed below: | ||
|
||
[RFC7095: jCard The JSON Format for vCard](https://datatracker.ietf.org/doc/html/rfc7095) | ||
format could be used instead, but this doesn't make much sense unless the entire | ||
profile was replaced. | ||
|
||
[RFC9553](https://datatracker.ietf.org/doc/html/rfc9553) offers an alternative | ||
representation for contacts (which is not backwards compatible with vCard). There | ||
exists `timeZone` field under the `addresses` field which uses an time zone name | ||
from the IANA Time Zone Database. | ||
|
||
Note there's an alternative [jCard](https://microformats.org/wiki/jCard) format | ||
which is a non-standard derivative of [hCard](https://microformats.org/wiki/hcard). | ||
|
||
|
||
### Competitive analysis | ||
|
||
Slack's [`users.info` API call](https://api.slack.com/methods/users.info) includes | ||
3 separate fields: | ||
|
||
* `tz`: the time zone database name (e.g. `"America/New_York"`) | ||
* `tz_label`: a friendly name (e.g. `"Eastern Daylight Time"`) | ||
* `tz_offset`: offset in seconds as an integer (e.g. `-14400`) | ||
|
||
XMPP uses either: | ||
|
||
* [XEP-054](https://xmpp.org/extensions/xep-0054.html) uses vCard | ||
([RFC2426](https://datatracker.ietf.org/doc/html/rfc2426)) converted to XML via | ||
[draft-dawson-vcard-xml-dtd-01](https://datatracker.ietf.org/doc/html/draft-dawson-vcard-xml-dtd-01) | ||
* [XEP-0292](https://xmpp.org/extensions/xep-0292.html) uses xCard: vCard XML Representation | ||
([RFC6351](https://datatracker.ietf.org/doc/html/rfc6351)), see also vCard4 | ||
([RFC6351](https://datatracker.ietf.org/doc/html/rfc6351)) | ||
|
||
Rocket.Chat provides a user's [time zone offset](https://developer.rocket.chat/docs/user) | ||
in the `utcOffset` field. | ||
|
||
Mattermost [returns an object](https://api.mattermost.com/#tag/users/operation/GetUser) | ||
with the user's manual and/or automatic IANA time zone name. | ||
|
||
Discord, Twitter, and IRC don't provide a user's time zone. | ||
|
||
|
||
## Security considerations | ||
|
||
Showing a user's time zone gives some information to their location. There is currently | ||
no way to limit what profile fields other users can see. | ||
clokep marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
Clients may wish to warn users when providing a timezone and give | ||
the option to not include it in their profile. | ||
|
||
|
||
## Unstable prefix | ||
|
||
`us.cloke.msc4175.tz` should be used in place of `m.tz`. | ||
|
||
Clients may immediately use the stable profile field once this MSC is accepted. This is | ||
a client-to-client protocol and no feature negotiation is necessary. | ||
|
||
|
||
## Dependencies | ||
|
||
Requires [MSC4133](https://github.com/matrix-org/matrix-spec-proposals/pull/4133). |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.