Added google oath token to DB as the session was invalidated after restart.

This commit is contained in:
Ziver Koc 2021-09-06 16:04:36 +02:00
parent 48a139cdd5
commit f27f7e4c81
2 changed files with 32 additions and 5 deletions

View file

@ -120,6 +120,14 @@ public class HalContext {
return value != null ? Integer.parseInt(getStringProperty(key)) : defaultValue; return value != null ? Integer.parseInt(getStringProperty(key)) : defaultValue;
} }
public static long getLongProperty(String key){
return getLongProperty(key, 0);
}
public static long getLongProperty(String key, long defaultValue){
String value = getStringProperty(key);
return value != null ? Long.parseLong(getStringProperty(key)) : defaultValue;
}
public static boolean getBooleanProperty(String key) { public static boolean getBooleanProperty(String key) {
return getBooleanProperty(key, false); return getBooleanProperty(key, false);
} }

View file

@ -24,7 +24,6 @@ import com.google.home.graph.v1.HomeGraphApiServiceProto;
import com.google.protobuf.Struct; import com.google.protobuf.Struct;
import com.google.protobuf.Value; import com.google.protobuf.Value;
import org.json.JSONObject; import org.json.JSONObject;
import se.hal.EventControllerManager;
import se.hal.HalContext; import se.hal.HalContext;
import se.hal.intf.HalAbstractDevice; import se.hal.intf.HalAbstractDevice;
import se.hal.plugin.assistant.google.trait.DeviceTrait; import se.hal.plugin.assistant.google.trait.DeviceTrait;
@ -33,7 +32,6 @@ import se.hal.plugin.assistant.google.trait.OnOffTrait;
import se.hal.plugin.assistant.google.type.DeviceType; import se.hal.plugin.assistant.google.type.DeviceType;
import se.hal.struct.Event; import se.hal.struct.Event;
import se.hal.struct.Sensor; import se.hal.struct.Sensor;
import se.hal.struct.devicedata.OnOffEventData;
import zutil.db.DBConnection; import zutil.db.DBConnection;
import zutil.log.LogUtil; import zutil.log.LogUtil;
import zutil.net.http.page.oauth.OAuth2Registry.TokenRegistrationListener; import zutil.net.http.page.oauth.OAuth2Registry.TokenRegistrationListener;
@ -46,9 +44,27 @@ import java.util.logging.Logger;
public class SmartHomeImpl extends SmartHomeApp implements TokenRegistrationListener { public class SmartHomeImpl extends SmartHomeApp implements TokenRegistrationListener {
private static final Logger logger = LogUtil.getLogger(); private static final Logger logger = LogUtil.getLogger();
private static final String AGENT_USER_ID = "Hal-" + (int)(Math.random()*10000);
public SmartHomeImpl() { } public static final String CONFIG_USER_AGENT = "hal_assistant_google.user_agent";
public static final String CONFIG_TOKEN = "hal_assistant_google.token";
public static final String CONFIG_TOKEN_TIMEOUT = "hal_assistant_google.token_timeout";
private final String userAgent;
public SmartHomeImpl() {
if (!HalContext.containsProperty(CONFIG_USER_AGENT))
HalContext.setProperty(CONFIG_USER_AGENT, "Hal-" + (int) (Math.random() * 10000));
userAgent = HalContext.getStringProperty(CONFIG_USER_AGENT);
if (HalContext.containsProperty(CONFIG_TOKEN)) {
// Restore previous token
onTokenRegistration(
null,
HalContext.getStringProperty(CONFIG_TOKEN),
HalContext.getLongProperty(CONFIG_TOKEN_TIMEOUT));
}
}
@Override @Override
@ -60,6 +76,9 @@ public class SmartHomeImpl extends SmartHomeApp implements TokenRegistrationList
)); ));
this.setCredentials(credentials); this.setCredentials(credentials);
logger.fine("New OAuth2 token registered."); logger.fine("New OAuth2 token registered.");
HalContext.setProperty(CONFIG_TOKEN, token);
HalContext.setProperty(CONFIG_TOKEN_TIMEOUT, String.valueOf(timeoutMillis));
} catch (Exception e) { } catch (Exception e) {
logger.log(Level.SEVERE, "Could not load google credentials", e); logger.log(Level.SEVERE, "Could not load google credentials", e);
} }
@ -87,7 +106,7 @@ public class SmartHomeImpl extends SmartHomeApp implements TokenRegistrationList
logger.log(Level.WARNING, "Unable to retrieve devices.", e); logger.log(Level.WARNING, "Unable to retrieve devices.", e);
} }
res.payload.agentUserId = AGENT_USER_ID; res.payload.agentUserId = userAgent;
res.payload.devices = new SyncResponse.Payload.Device[deviceList.size()]; res.payload.devices = new SyncResponse.Payload.Device[deviceList.size()];
for (int i = 0; i < res.payload.devices.length; i++) { for (int i = 0; i < res.payload.devices.length; i++) {
HalAbstractDevice device = deviceList.get(i); HalAbstractDevice device = deviceList.get(i);