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