Beispiel #1
0
 public EventMessage(EventMessageName name, object message, AesSecurityProvider provider)
 {
     Message = message;
     Name    = name.ToString();
     //encrypt data with logged in pin and session id (wrapped in an AesSecurityProvider)
     Args[0] = provider.EncryptData(message);
 }
        public IActionResult Data([FromQuery] string pairingId, [FromQuery] int sessionId, [FromQuery][JsonConverter(typeof(StringEnumConverter))] EncryptedResourceType resource)
        {
            var pairingSession = IsValidPairingSession(pairingId, HandshakeResourceType.Session);

            if (pairingSession.Item1 != "OK")
            {
                return(BadRequest(pairingSession.Item1));
            }

            var key = pairingSession.Item2.Key;
            var securityProvider = new AesSecurityProvider(key, sessionId);

            string message = "5::/com.samsung.companion:";

            switch (resource)
            {
            case EncryptedResourceType.RegisterRemoteControl:
                message += new EventMessage(EventMessageName.registerPush, new RegisterRemoteControlMessage(), securityProvider).Serialize();
                break;

            case EncryptedResourceType.RegisterSecondTvMessage:
                message += new EventMessage(EventMessageName.callCommon, new RegisterSecondTvMessage(), securityProvider).Serialize();
                break;

            case EncryptedResourceType.GetDuidMessage:
                message += new EventMessage(EventMessageName.callCommon, new GetDuidMessage(), securityProvider).Serialize();
                break;

            default:
                return(BadRequest("no resource given"));
            }
            return(Ok(message));
        }
Beispiel #3
0
        public string Decrypt(string data, int sessionId)
        {
            if (Step == HandshakeResourceType.Session)
            {
                var securityProvider = new AesSecurityProvider(Key, sessionId);
                var decrypted        = securityProvider.DecryptData(data);

                CheckDuidMessage(decrypted);
                return(decrypted);
            }
            return(null);
        }
        private async Task InitTargetDevice(DeviceInfo device)
        {
            Console.WriteLine("InitTargetDevice - started... ");
            Logger instance = Logger.Instance;

            object[] encryptionEnabled = new object[] { this.devicePairing.EncryptionEnabled };
            instance.LogMessageFormat("InitTargetDevice - EncryptionEnabled : {0}", encryptionEnabled);
            ISecondTvSecurityProvider noSecurityProvider = null;

            if (!this.devicePairing.EncryptionEnabled)
            {
                noSecurityProvider = new NoSecurityProvider();
            }
            else
            {
                noSecurityProvider = new AesSecurityProvider(this.devicePairing.SpcApi.GetKey(), this.devicePairing.SessionId);
            }
            Console.WriteLine("InitTargetDevice - Created Tv device.");

            ITargetDevice targetDevice = SmartTVRemoteControl.DeviceFactory.CreateTvDevice(device, this.notificationProvider, new DispatcherWrapper(Dispatcher.CurrentDispatcher), noSecurityProvider);

            Console.WriteLine("InitTargetDevice - Set current device.");
            this.SetCurrentDevice(targetDevice);
            try
            {
                Console.WriteLine("InitTargetDevice - Initialize Tv device.");
                AsyncContext.Run(() => targetDevice.InitializeAsync());
                //await targetDevice.InitializeAsync();
            }
            catch (Exception exception1)
            {
                Exception exception = exception1;
                Console.WriteLine("[ERROR]Catch exception when initialize TV.");
                Logger logger = Logger.Instance;
                logger.LogMessageFormat("Exception message: {0}", new object[] { exception.Message });
                Logger instance1 = Logger.Instance;
                instance1.LogMessageFormat("Exception stacktrace: {0}", new object[] { exception.StackTrace });
            }
            finally
            {
                Console.WriteLine("InitTargetDevice is complete");
            }
        }
        public IActionResult Button([FromQuery] string pairingId, [FromQuery] int sessionId, [FromQuery] string buttonId)
        {
            var pairingSession = IsValidPairingSession(pairingId, HandshakeResourceType.Session);

            if (pairingSession.Item1 == "OK")
            {
                if (string.IsNullOrEmpty(pairingSession.Item2.Duid))
                {
                    return(NotFound(
                               $"to call a button you get the encrypted message to get the duid from: {Constants.DuidUrl}. Then send that data via the websocket to the tv and decrypt the responnse on: {Constants.DecryptUrl}. That will store the TV identifier (DUID) in the session"));
                }

                var key = pairingSession.Item2.Key;
                var securityProvider = new AesSecurityProvider(key, sessionId);

                var message = "5::/com.samsung.companion:" + new EventMessage(EventMessageName.callCommon, new ButtonMessage(buttonId, pairingSession.Item2.Duid), securityProvider)
                              .Serialize();
                return(Ok(message));
            }

            return(BadRequest(pairingSession.Item1));
        }
Beispiel #6
0
        private async Task InitTargetDevice(DeviceInfo device)
        {
            Logger.Instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - started... ", new object[0]);
            Logger instance = Logger.Instance;

            object[] encryptionEnabled = new object[] { this.devicePairing.EncryptionEnabled };
            instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - EncryptionEnabled : {0}", encryptionEnabled);
            ISecondTvSecurityProvider noSecurityProvider = null;

            if (!this.devicePairing.EncryptionEnabled)
            {
                noSecurityProvider = new NoSecurityProvider();
            }
            else
            {
                noSecurityProvider = new AesSecurityProvider(this.devicePairing.SpcApi.GetKey(), this.devicePairing.SessionId);
            }
            Logger.Instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - Created Tv device.", new object[0]);
            ITargetDevice targetDevice = SmartView2.DeviceFactory.CreateTvDevice(device, this.notificationProvider, this.dispatcher, noSecurityProvider);

            Logger.Instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - Set current device.", new object[0]);
            this.SetCurrentDevice(targetDevice);
            try
            {
                Logger.Instance.LogMessageFormat("[SmartView2][DeviceController]InitTargetDevice - Initialize Tv device.", new object[0]);
                await targetDevice.InitializeAsync();
            }
            catch (Exception exception1)
            {
                Exception exception = exception1;
                Logger.Instance.LogMessageFormat("[SmartView2][DeviceController][ERROR]Catch exception when initialize TV.", new object[0]);
                Logger logger = Logger.Instance;
                logger.LogMessageFormat("[SmartView2][DeviceController]Exception message: {0}", new object[] { exception.Message });
                Logger instance1 = Logger.Instance;
                instance1.LogMessageFormat("[SmartView2][DeviceController]Exception stacktrace: {0}", new object[] { exception.StackTrace });
            }
        }