示例#1
0
        public void Initialize(IPluginHostAPI pluginHost)
        {
            var db        = pluginHost.GetRawDatabase();
            var jwtSecret = pluginHost.GetSettings(this)["JWTSecret"];

            pluginHost.ProvideAuth(new DefaultAuthProvider(db, jwtSecret, pluginHost.GetServerID()));
        }
        public void HandleMessage(Session session, BaseMessage message)
        {
            BaseMessage msg = new BaseMessage(message, true);

            msg.Payload["testProp"] = "hello world";
            msg.Ok   = true;
            msg.From = hostModuleAPI.GetServerID();
            session.ConnectionHandler.SendMessage(msg);
        }
        public void HandleMessage(Session session, BaseMessage message)
        {
            var pObj         = message.Payload.ToObject <RegisterRequestPayload>();
            var authProvider = _pluginHost.GetAuthProvider();

            try
            {
                authProvider.CreateUser(pObj.Username, pObj.Password);
            }
            catch (Exception e)
            {
                BaseMessage errorReply;
                if (e.Message.Contains("E11000"))
                {
                    errorReply = OtherUtils.GenerateProtocolError(
                        message,
                        "id_exists",
                        "Username already taken",
                        new Dictionary <string, object>()
                        );
                }
                else
                {
                    errorReply = OtherUtils.GenerateProtocolError(
                        message,
                        "other",
                        e.ToString(),
                        new Dictionary <string, object>()
                        );
                }

                session.ConnectionHandler.SendMessage(errorReply);
                return;
            }

            BaseMessage reply = new BaseMessage(message, true);
            var         p     = new RegisterResponsePayload();

            p.UserID = $"@{pObj.Username}@{_pluginHost.GetServerID()}";

            reply.Payload = p.ToDictionary();
            reply.Ok      = true;
            session.ConnectionHandler.SendMessage(reply);
        }
示例#4
0
        public void HandleMessage(Session session, BaseMessage message)
        {
            var receivedMessage = JsonConvert.DeserializeObject <Message>(JsonConvert.SerializeObject(message.Payload));
            var response        = new BaseMessage(message, true);

            response.Ok   = true;
            response.From = pluginHostAPI.GetServerID();
            response.To   = null;
            var respPayload = new MessageSentResponse();

            respPayload.MessageID             = Guid.NewGuid().ToString();
            respPayload.OriginServerTimestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
            response.Payload = respPayload.ToDictionary();
            session.ConnectionHandler.SendMessage(response);

            var recipientSession = pluginHostAPI.GetSessionManager()
                                   .GetSessions()
                                   .Select(x => x.Value)
                                   .Where(x => x.AuthData.EntityID.Where(x => x == message.To.First()).FirstOrDefault() != null)
                                   .FirstOrDefault();

            if (recipientSession == null)
            {
                Log.Debug("Recipient doesn't exist or currently offline!");
                return; // TODO fix this behaviour in specs
            }

            var msgForRecipient = new BaseMessage();

            msgForRecipient.From        = session.AuthData.EntityID.First();
            msgForRecipient.MessageType = "urn:cadmium:chats:message";
            respPayload.Type            = receivedMessage.Type;
            respPayload.Content         = receivedMessage.Content;
            msgForRecipient.Payload     = respPayload.ToDictionary();
            recipientSession.ConnectionHandler.SendMessage(msgForRecipient);
        }