/* * Copyright 2015 the original author or authors. * @https://github.com/scouter-project/scouter * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package scouter.client.net; import scouter.Version; import scouter.client.server.Server; import scouter.client.server.ServerManager; import scouter.lang.counters.CounterEngine; import scouter.lang.pack.MapPack; import scouter.lang.pack.Pack; import scouter.lang.value.BlobValue; import scouter.lang.value.MapValue; import scouter.lang.value.Value; import scouter.net.RequestCmd; import scouter.util.CipherUtil; import scouter.util.SysJMX; public class LoginMgr{ public static LoginResult login(int serverId, String user, String password){ Server server = ServerManager.getInstance().getServer(serverId); String encrypted = CipherUtil.sha256(password); return silentLogin(server, user, encrypted); } public static LoginResult login(int serverId, String user, String password, boolean secureLogin){ Server server = ServerManager.getInstance().getServer(serverId); if(secureLogin) { password = CipherUtil.sha256(password); } server.setSecureMode(secureLogin); return silentLogin(server, user, password); } public static LoginResult silentLogin(Server server, String user, String password){ LoginResult result = new LoginResult(); try { MapPack param = new MapPack(); param.put("id", user); param.put("pass", password); param.put("version", Version.getClientFullVersion()); param.put("hostname", SysJMX.getHostName()); MapPack out = TcpProxy.loginProxy(server.getId(), param); if (out == null) { result.success = false; result.errorMessage = "Network connection failed"; } else { long session = out.getLong("session"); String error = out.getText("error"); if(error != null && session == 0L){ result.success = false; result.errorMessage = "Authentication failed"; return result; } server.setOpen(true); long time = out.getLong("time"); String serverName = out.getText("server_id"); String type = out.getText("type"); String version = out.getText("version"); String email = out.getText("email"); String timezone = out.getText("timezone"); int soTimeOut = out.getInt("so_time_out"); server.setSession(session); server.setName(serverName); server.setDelta(time); server.setUserId(user); server.setPassword(password); server.setGroup(type); server.setVersion(version); server.setEmail(email); server.setTimezone(timezone); server.setSoTimeOut(soTimeOut); Value value = out.get("policy"); if (value != null) { MapValue mv = (MapValue) value; server.setGroupPolicy(mv); } Value menuV = out.get("menu"); if (menuV != null) { MapValue mv = (MapValue) menuV; server.setMenuEnableMap(mv); } CounterEngine counterEngine = server.getCounterEngine(); MapPack m = getCounterXmlServer(server.getId()); if (m != null) { counterEngine.clear(); Value v1 = m.get("default"); counterEngine.parse(((BlobValue)v1).value); v1 = m.get("custom"); if (v1 != null) { counterEngine.parse(((BlobValue)v1).value); } } result.success = true; } } catch(Exception e){ e.printStackTrace(); result.success = false; result.errorMessage = "Network connection failed : " + e.getMessage(); } return result; } public static MapPack getCounterXmlServer(int serverId) { TcpProxy tcp = TcpProxy.getTcpProxy(serverId); Pack p = null; try { p = tcp.getSingle(RequestCmd.GET_XML_COUNTER, null); } catch (Exception e) { e.printStackTrace(); return null; } finally { TcpProxy.putTcpProxy(tcp); } return (MapPack) p; } }