1package eu.siacs.conversations.xmpp.manager;
2
3import android.content.Context;
4import eu.siacs.conversations.AppSettings;
5import eu.siacs.conversations.generator.AbstractGenerator;
6import eu.siacs.conversations.services.XmppConnectionService;
7import eu.siacs.conversations.xmpp.XmppConnection;
8import im.conversations.android.xmpp.model.error.Condition;
9import im.conversations.android.xmpp.model.error.Error;
10import im.conversations.android.xmpp.model.stanza.Iq;
11import im.conversations.android.xmpp.model.time.Time;
12import java.util.Locale;
13import java.util.TimeZone;
14
15public class EntityTimeManager extends AbstractManager {
16
17 public EntityTimeManager(XmppConnectionService context, XmppConnection connection) {
18 super(context, connection);
19 }
20
21 public void request(final Iq request) {
22 final var appSettings = new AppSettings(this.context);
23 if (appSettings.isUseTor() || getAccount().isOnion()) {
24 this.connection.sendErrorFor(request, Error.Type.AUTH, new Condition.Forbidden());
25 return;
26 }
27 final var time = new Time();
28 final long now = System.currentTimeMillis();
29 time.setUniversalTime(AbstractGenerator.getTimestamp(now));
30 final TimeZone ourTimezone = TimeZone.getDefault();
31 final long offsetSeconds = ourTimezone.getOffset(now) / 1000;
32 final long offsetMinutes = Math.abs((offsetSeconds % 3600) / 60);
33 final long offsetHours = offsetSeconds / 3600;
34 final String hours;
35 if (offsetHours < 0) {
36 hours = String.format(Locale.US, "%03d", offsetHours);
37 } else {
38 hours = String.format(Locale.US, "%02d", offsetHours);
39 }
40 String minutes = String.format(Locale.US, "%02d", offsetMinutes);
41 time.setTimeZoneOffset(hours + ":" + minutes);
42 this.connection.sendResultFor(request, time);
43 }
44}