示例#1
0
        private static async Task ReloadConfig()
        {
            try
            {
                string computername = NativeMethods.GetHostName().ToLower();
                string computerfqdn = NativeMethods.GetFQDN().ToLower();

                var servers = await global.webSocketClient.Query <unattendedserver>("openrpa", "{'_type':'unattendedserver', 'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'}");

                server = servers.FirstOrDefault();

                unattendedclient[] clients = new unattendedclient[] { };
                if (server != null && server.enabled)
                {
                    disabledmessageshown = false;
                    clients = await global.webSocketClient.Query <unattendedclient>("openrpa", "{'_type':'unattendedclient', 'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'}");
                }
                else if (disabledmessageshown == false)
                {
                    Log.Information("No server for " + computerfqdn + " found, or server is disabled");
                    disabledmessageshown = true;
                }
                var sessioncount = sessions.Count();
                foreach (var c in clients)
                {
                    RobotUserSession session = null;
                    if (sessions != null)
                    {
                        session = sessions.Where(x => x.client.windowsusername == c.windowsusername).FirstOrDefault();
                    }
                    if (session == null)
                    {
                        if (c.enabled)
                        {
                            UnattendedclientUpdated(c);
                        }
                    }
                    else
                    {
                        if (c._modified != session.client._modified || c._version != session.client._version)
                        {
                            UnattendedclientUpdated(c);
                        }
                    }
                }
                cleanup();
            }
            catch (Exception ex)
            {
                Log.Error(ex.ToString());
            }
        }
示例#2
0
文件: Program.cs 项目: max620/openrpa
        private static async Task ReloadConfig()
        {
            try
            {
                string computername = NativeMethods.GetHostName().ToLower();
                string computerfqdn = NativeMethods.GetFQDN().ToLower();

                var servers = await global.webSocketClient.Query <unattendedserver>("openrpa", "{'_type':'unattendedserver', 'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'}");

                unattendedserver server = servers.FirstOrDefault();

                unattendedclient[] clients = new unattendedclient[] { };
                if (server != null && server.enabled)
                {
                    clients = await global.webSocketClient.Query <unattendedclient>("openrpa", "{'_type':'unattendedclient', 'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'}");
                }
                var sessioncount = sessions.Count();
                foreach (var c in clients)
                {
                    var session = sessions.Where(x => x.client.windowsusername == c.windowsusername).FirstOrDefault();
                    if (session == null)
                    {
                        if (c.enabled)
                        {
                            Log.Information("Adding session for " + c.windowsusername);
                            sessions.Add(new RobotUserSession(c));
                        }
                    }
                    else
                    {
                        if (c._modified != session.client._modified)
                        {
                            Log.Information("Removing:1 session for " + session.client.windowsusername);
                            if (c.enabled)
                            {
                                sessions.Remove(session);
                                session.Dispose();
                                session = null;
                                Log.Information("Adding session for " + c.windowsusername);
                                sessions.Add(new RobotUserSession(c));
                            }
                            else
                            {
                                if (session.rdp != null || session.freerdp != null)
                                {
                                    session.disconnectrdp();
                                }
                                session.client = c;
                            }
                        }
                    }
                }
                foreach (var session in sessions.ToList())
                {
                    var c = clients.Where(x => x.windowsusername == session.client.windowsusername).FirstOrDefault();
                    if (c == null)
                    {
                        if (session.connection == null)
                        {
                            Log.Information("Removing:2 session for " + session.client.windowsusername);
                            sessions.Remove(session);
                            session.Dispose();
                        }
                    }
                }
                if (sessioncount != sessions.Count())
                {
                    Log.Information("Currently have " + sessions.Count() + " sessions");
                }

                // Log.Information("Loaded " + sessions.Count + " sessions");
            }
            catch (Exception ex)
            {
                Log.Error(ex.ToString());
            }
        }
示例#3
0
文件: Program.cs 项目: max620/openrpa
        private static async void WebSocketClient_OnOpen()
        {
            try
            {
                Log.Information("WebSocketClient_OnOpen");
                TokenUser user = null;
                while (user == null)
                {
                    if (!string.IsNullOrEmpty(PluginConfig.tempjwt))
                    {
                        user = await global.webSocketClient.Signin(PluginConfig.tempjwt); if (user != null)
                        {
                            if (isService)
                            {
                                PluginConfig.jwt     = Base64Encode(PluginConfig.ProtectString(PluginConfig.tempjwt));
                                PluginConfig.tempjwt = null;
                                Config.Save();
                            }
                            Log.Information("Signed in as " + user.username);
                        }
                    }
                    else if (PluginConfig.jwt != null && PluginConfig.jwt.Length > 0)
                    {
                        user = await global.webSocketClient.Signin(PluginConfig.UnprotectString(Base64Decode(PluginConfig.jwt))); if (user != null)
                        {
                            Log.Information("Signed in as " + user.username);
                        }
                    }
                    else
                    {
                        Log.Error("Missing jwt from config, close down");
                        _ = global.webSocketClient.Close();
                        if (isService)
                        {
                            await manager.StopService();
                        }
                        if (!isService)
                        {
                            Environment.Exit(0);
                        }
                        return;
                    }
                }
                string computername = NativeMethods.GetHostName().ToLower();
                string computerfqdn = NativeMethods.GetFQDN().ToLower();
                var    servers      = await global.webSocketClient.Query <unattendedserver>("openrpa", "{'_type':'unattendedserver', 'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'}");

                unattendedserver server = servers.FirstOrDefault();
                if (servers.Length == 0)
                {
                    Log.Information("Adding new unattendedserver for " + computerfqdn);
                    server = new unattendedserver()
                    {
                        computername = computername, computerfqdn = computerfqdn, name = computerfqdn
                    };
                    server = await global.webSocketClient.InsertOne("openrpa", 1, false, server);
                }
                //var clients = await global.webSocketClient.Query<unattendedclient>("openrpa", "{'_type':'unattendedclient', 'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'}");
                //foreach (var c in clients) sessions.Add(new RobotUserSession(c));
                // Log.Information("Loaded " + sessions.Count + " sessions");
                // Create listener for robots to connect too
                PipeSecurity ps = new PipeSecurity();
                ps.AddAccessRule(new PipeAccessRule("Users", PipeAccessRights.ReadWrite | PipeAccessRights.CreateNewInstance, System.Security.AccessControl.AccessControlType.Allow));
                ps.AddAccessRule(new PipeAccessRule("CREATOR OWNER", PipeAccessRights.FullControl, System.Security.AccessControl.AccessControlType.Allow));
                ps.AddAccessRule(new PipeAccessRule("SYSTEM", PipeAccessRights.FullControl, System.Security.AccessControl.AccessControlType.Allow));
                pipe = new OpenRPA.NamedPipeWrapper.NamedPipeServer <RPAMessage>("openrpa_service", ps);
                pipe.ClientConnected += Pipe_ClientConnected;
                pipe.ClientMessage   += Pipe_ClientMessage;
                pipe.Start();

                if (reloadTimer == null)
                {
                    reloadTimer = new System.Threading.Timer(o =>
                    {
                        try
                        {
                            _ = ReloadConfig();
                        }
                        catch (Exception ex)
                        {
                            Log.Error(ex.ToString());
                        }
                    }, null, (int)PluginConfig.reloadinterval.TotalMilliseconds, (int)PluginConfig.reloadinterval.TotalMilliseconds);
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.ToString());
            }
        }
示例#4
0
        private static async void WebSocketClient_OnOpen()
        {
            try
            {
                InitializeOTEL();
                Log.Information("WebSocketClient_OnOpen");
                TokenUser user = null;
                while (user == null)
                {
                    if (!string.IsNullOrEmpty(PluginConfig.tempjwt))
                    {
                        user = await global.webSocketClient.Signin(PluginConfig.tempjwt, "RDService", global.version);

                        if (user != null)
                        {
                            if (isService)
                            {
                                PluginConfig.jwt     = Base64Encode(PluginConfig.ProtectString(PluginConfig.tempjwt));
                                PluginConfig.tempjwt = null;
                                PluginConfig.Save();
                            }
                            Log.Information("Signed in as " + user.username);
                        }
                    }
                    else if (PluginConfig.jwt != null && PluginConfig.jwt.Length > 0)
                    {
                        user = await global.webSocketClient.Signin(PluginConfig.UnprotectString(Base64Decode(PluginConfig.jwt)), "RDService", global.version);

                        if (user != null)
                        {
                            Log.Information("Signed in as " + user.username);
                        }
                    }
                    else
                    {
                        Log.Error("Missing jwt from config, close down");
                        _ = global.webSocketClient.Close();
                        if (isService)
                        {
                            await manager.StopService();
                        }
                        if (!isService)
                        {
                            Environment.Exit(0);
                        }
                        return;
                    }
                }
                string computername = NativeMethods.GetHostName().ToLower();
                string computerfqdn = NativeMethods.GetFQDN().ToLower();
                var    servers      = await global.webSocketClient.Query <unattendedserver>("openrpa", "{'_type':'unattendedserver', 'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'}");

                server = servers.FirstOrDefault();
                if (servers.Length == 0)
                {
                    Log.Information("Adding new unattendedserver for " + computerfqdn);
                    server = new unattendedserver()
                    {
                        computername = computername, computerfqdn = computerfqdn, name = computerfqdn, enabled = true
                    };
                    server = await global.webSocketClient.InsertOne("openrpa", 1, false, server);
                }
                //var clients = await global.webSocketClient.Query<unattendedclient>("openrpa", "{'_type':'unattendedclient', 'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'}");
                //foreach (var c in clients) sessions.Add(new RobotUserSession(c));
                // Log.Information("Loaded " + sessions.Count + " sessions");
                // Create listener for robots to connect too

                if (global.openflowconfig.supports_watch)
                {
                    if (string.IsNullOrEmpty(openrpa_watchid))
                    {
                        // "{'_type':'unattendedclient', 'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'}"
                        // openrpa_watchid = await global.webSocketClient.Watch("openrpa", "[{ '$match': { 'fullDocument._type': {'computername':'" + computername + "', 'computerfqdn':'" + computerfqdn + "'} } }]", onWatchEvent);
                        openrpa_watchid = await global.webSocketClient.Watch("openrpa", "[{ '$match': {'fullDocument.computername':'" + computername + "', 'fullDocument.computerfqdn':'" + computerfqdn + "'} }]", onWatchEvent);

                        // openrpa_watchid = await global.webSocketClient.Watch("openrpa", "[]", onWatchEvent);
                        await ReloadConfig();
                    }
                }
                else
                {
                    if (reloadTimer == null)
                    {
                        reloadTimer          = new System.Timers.Timer(PluginConfig.reloadinterval.TotalMilliseconds);
                        reloadTimer.Elapsed += async(o, e) =>
                        {
                            reloadTimer.Stop();
                            try
                            {
                                await ReloadConfig();
                            }
                            catch (Exception ex)
                            {
                                Log.Error(ex.ToString());
                            }
                            reloadTimer.Start();
                        };
                    }
                    reloadTimer.Start();
                }
            }
            catch (Exception ex)
            {
                Log.Error(ex.ToString());
            }
            finally
            {
            }
        }