summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjwijenbergh <jeroenwijenbergh@protonmail.com>2023-03-20 13:01:04 +0100
committerJeroen Wijenbergh <46386452+jwijenbergh@users.noreply.github.com>2023-09-25 09:43:37 +0200
commitbca64b796e938daa427144f3f75bc8f795c1ab60 (patch)
tree28fecc57111e5608e3db1e89f7608038f74e29ba
parent964ce28f1b75738a62c66c522048380e26aa4443 (diff)
Server Base: Add functions for getting expiry times
-rw-r--r--internal/server/base.go67
1 files changed, 67 insertions, 0 deletions
diff --git a/internal/server/base.go b/internal/server/base.go
index bfa0d73..c7a9adc 100644
--- a/internal/server/base.go
+++ b/internal/server/base.go
@@ -43,3 +43,70 @@ func (b *Base) ValidProfiles(wireguardSupport bool) ProfileInfo {
Info: ProfileListInfo{ProfileList: valid},
}
}
+
+// RenewButtonTime returns the time when the renew button should be shown for the server
+// Implemented according to: https://github.com/eduvpn/documentation/blob/cdf4d054f7652d74e4192494e8bb0e21040e46ac/API.md#session-expiry
+func (b *Base) RenewButtonTime() int64 {
+ d := b.EndTime.Sub(b.StartTime)
+
+ // If the time is less than 24 hours (a day left), show it when 30 minutes have passed or on expired if less than 30 minutes
+ dayl := time.Duration(24 * time.Hour)
+ if d < dayl {
+ // Get the minimum time to add, 30 minutes or on expired
+ m := time.Duration(30 * time.Minute)
+ // The total delta time is larger, return that we should show the button after 30 minutes
+ if d > m {
+ return b.StartTime.Add(30 * time.Minute).Unix()
+ }
+ // Just show it on expired
+ return b.StartTime.Add(d).Unix()
+ }
+
+ // Else just show it when 24 hours is left
+ // This is the delta minus 24 hours left as that's how long it takes for a day to be left in the expiry
+ // We thus add this to the start time
+ tillDay := d - dayl
+ t := b.StartTime.Add(tillDay)
+ return t.Unix()
+}
+
+func (b *Base) CountdownTime() int64 {
+ d := b.EndTime.Sub(b.StartTime)
+
+ dayl := time.Duration(24 * time.Hour)
+
+ // This is just the last 24 hours
+ // if less than or equal to 24 hours, immediately
+ if d <= dayl {
+ return b.StartTime.Unix()
+ }
+
+ tillDay := d - dayl
+ t := b.StartTime.Add(tillDay)
+ return t.Unix()
+}
+
+func (b *Base) NotificationTimes() []int64 {
+ last := []time.Duration{
+ time.Duration(0),
+ time.Duration(1 * time.Hour),
+ time.Duration(2 * time.Hour),
+ time.Duration(4 * time.Hour),
+ }
+
+ var t []int64
+
+ d := b.EndTime.Sub(b.StartTime)
+ for _, l := range last {
+ // If the notification remaining time is more than the total delta, continue
+ if l > d {
+ continue
+ }
+ // calculating the time till a notification must happen
+ tillN := d - l
+ // Get absolute time when this notification must be shown by adding the delta
+ c := b.StartTime.Add(tillN)
+ t = append(t, c.Unix())
+ }
+ return t
+}