/** * Odoo, Open Source Management Solution * Copyright (C) 2012-today Odoo SA (<http:www.odoo.com>) * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http:www.gnu.org/licenses/> * * Created on 18/12/14 3:15 PM */ package com.odoo.core.support; import android.content.Context; import com.odoo.App; import com.odoo.datas.OConstants; import org.json.JSONObject; import java.util.ArrayList; import java.util.List; import odoo.OArguments; import odoo.ODomain; import odoo.Odoo; import odoo.OdooAccountExpireException; import odoo.OdooInstance; import odoo.OdooVersion; public class OdooLoginHelper { private App mApp; private Odoo mOdoo; private Context mContext; public OdooLoginHelper(Context context) { mContext = context; mApp = (App) mContext.getApplicationContext(); } public OUser login(String username, String password, String database, String serverURL, Boolean forceConnect) { try { mOdoo = new Odoo(mContext, serverURL, forceConnect); JSONObject res = mOdoo.authenticate(username, password, database); int user_id; if (res.get("uid") instanceof Integer) { user_id = res.getInt("uid"); OUser user = new OUser(); user.setOAuthLogin(false); user.setPassword(password); user.setUsername(username); user.setAllowSelfSignedSSL(forceConnect); user.setHost(serverURL); user.setUser_id(user_id); user.setDatabase(database); ODomain domain = new ODomain(); domain.add("id", "=", user_id); user = getUserDetails(domain, user, null); mApp.setOdoo(mOdoo, user); return user; } } catch (Exception e) { e.printStackTrace(); } return null; } public OUser instanceLogin(OdooInstance instance, OUser uData) throws OdooAccountExpireException { try { JSONObject res = mOdoo.oauth_authenticate(instance, uData.getUsername(), uData.getPassword()); int user_id; if (res.get("uid") instanceof Integer) { user_id = res.getInt("uid"); ODomain domain = new ODomain(); domain.add("id", "=", user_id); uData = getUserDetails(domain, uData, instance); mApp.setOdoo(mOdoo, uData); return uData; } } catch (OdooAccountExpireException e) { throw new OdooAccountExpireException(e.getMessage()); } catch (Exception e) { e.printStackTrace(); } return null; } private OUser getUserDetails(ODomain domain, OUser data, OdooInstance instance) { OUser user = data; try { OdooFields fields = new OdooFields(new String[]{ "name", "partner_id", "tz", "image_medium", "company_id" }); JSONObject res = mOdoo.search_read("res.users", fields.get(), domain.get()); JSONObject userData = res.getJSONArray("records").getJSONObject(0); String database = user.getDatabase(); if (instance != null) { user.setOAuthLogin(true); database = instance.getDatabaseName(); user.setInstanceDatabase(instance.getDatabaseName()); user.setInstanceUrl(instance.getInstanceUrl()); user.setClientId(instance.getClientId()); } user.setUser_id(userData.getInt("id")); user.setName(userData.getString("name")); user.setAvatar(userData.getString("image_medium")); user.setIsactive(true); user.setAndroidName(androidName(user.getUsername(), database)); user.setPartner_id(userData.getJSONArray("partner_id").getInt(0)); user.setTimezone(userData.getString("tz")); user.setCompany_id(userData.getJSONArray("company_id").getInt(0) + ""); OdooVersion version = mOdoo.getOdooVersion(); user.setVersion_number(version.getVersion_number()); user.setVersion_serie(version.getServer_serie()); } catch (Exception e) { e.printStackTrace(); } return user; } public String androidName(String username, String database) { return username + "[" + database + "]"; } public List<OdooInstance> getOdooInstances(OUser user) { List<OdooInstance> instances = new ArrayList<OdooInstance>(); //Default Instance (www.odoo.com) OdooInstance oInstance = new OdooInstance(); oInstance.setCompanyName(OConstants.ODOO_COMPANY_NAME); oInstance.setInstanceUrl(OConstants.URL_ODOO); instances.add(oInstance); //Getting user instances try { for (OdooInstance instance : mOdoo.get_instances(new OArguments().get())) { if (instance.isSaas()) { instances.add(instance); } } } catch (Exception e) { e.printStackTrace(); } return instances; } }