Implement "expires" and "not-before" for groups.
This commit is contained in:
@@ -157,6 +157,8 @@ nobody will be able to join the group. The following fields are allowed:
|
|||||||
a time;
|
a time;
|
||||||
- `max-history-age`: the time, in seconds, during which chat history is
|
- `max-history-age`: the time, in seconds, during which chat history is
|
||||||
kept (default 14400, i.e. 4 hours);
|
kept (default 14400, i.e. 4 hours);
|
||||||
|
- `not-before` and `expires`: the times (in ISO 8601 or RFC 3339 format)
|
||||||
|
between which joining the group is allowed;
|
||||||
- `allow-recording`: if true, then recording is allowed in this group;
|
- `allow-recording`: if true, then recording is allowed in this group;
|
||||||
- `unrestricted-tokens`: if true, then ordinary users (without the "op"
|
- `unrestricted-tokens`: if true, then ordinary users (without the "op"
|
||||||
privilege) are allowed to create tokens;
|
privilege) are allowed to create tokens;
|
||||||
|
|||||||
@@ -46,6 +46,12 @@ type Description struct {
|
|||||||
// The time for which history entries are kept.
|
// The time for which history entries are kept.
|
||||||
MaxHistoryAge int `json:"max-history-age,omitempty"`
|
MaxHistoryAge int `json:"max-history-age,omitempty"`
|
||||||
|
|
||||||
|
// Time after which joining is no longer allowed
|
||||||
|
Expires *time.Time `json:"expires"`
|
||||||
|
|
||||||
|
// Time before which joining is not allowed
|
||||||
|
NotBefore *time.Time `json:"not-before,omitempty"`
|
||||||
|
|
||||||
// Whether users are allowed to log in with an empty username.
|
// Whether users are allowed to log in with an empty username.
|
||||||
AllowAnonymous bool `json:"allow-anonymous,omitempty"`
|
AllowAnonymous bool `json:"allow-anonymous,omitempty"`
|
||||||
|
|
||||||
|
|||||||
@@ -607,6 +607,22 @@ func AddClient(group string, c Client, creds ClientCredentials) (*Group, error)
|
|||||||
}
|
}
|
||||||
return nil, UserError(m)
|
return nil, UserError(m)
|
||||||
}
|
}
|
||||||
|
if g.description.NotBefore != nil ||
|
||||||
|
g.description.Expires != nil {
|
||||||
|
now := time.Now()
|
||||||
|
if g.description.NotBefore != nil &&
|
||||||
|
g.description.NotBefore.After(now) {
|
||||||
|
return nil, UserError(
|
||||||
|
"this group is not open yet",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if g.description.Expires != nil &&
|
||||||
|
g.description.Expires.Before(now) {
|
||||||
|
return nil, UserError(
|
||||||
|
"this group is closed",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
if g.description.Autokick {
|
if g.description.Autokick {
|
||||||
ops := false
|
ops := false
|
||||||
for _, c := range clients {
|
for _, c := range clients {
|
||||||
|
|||||||
Reference in New Issue
Block a user