コード例 #1
0
        private static void Main()
        {
            Assembly.Load("OpenBus.Legacy.Idl");
            string hostName         = DemoConfig.Default.busHostName;
            ushort hostPort         = DemoConfig.Default.busHostPort;
            string loginFile        = DemoConfig.Default.loginFile;
            bool   useSSL           = DemoConfig.Default.useSSL;
            string clientUser       = DemoConfig.Default.clientUser;
            string clientThumbprint = DemoConfig.Default.clientThumbprint;
            string serverUser       = DemoConfig.Default.serverUser;
            string serverThumbprint = DemoConfig.Default.serverThumbprint;
            ushort serverSSLPort    = DemoConfig.Default.serverSSLPort;
            ushort serverOpenPort   = DemoConfig.Default.serverOpenPort;
            string busIORFile       = DemoConfig.Default.busIORFile;

            if (useSSL)
            {
                Utils.InitSSLORB(clientUser, clientThumbprint, serverUser, serverThumbprint, serverSSLPort, serverOpenPort, true, true, "required", false, false);
            }
            else
            {
                ORBInitializer.InitORB();
            }

/*
 *    ConsoleAppender appender = new ConsoleAppender {
 *                                                     Threshold = Level.Off,
 *                                                     Layout =
 *                                                       new SimpleLayout(),
 *                                                   };
 *    BasicConfigurator.Configure(appender);
 */
            ConnectionProperties props   = new ConnectionPropertiesImpl();
            OpenBusContext       context = ORBInitializer.Context;
            Connection           conn;

            if (useSSL)
            {
                string ior = File.ReadAllText(busIORFile);
                conn = context.ConnectByReference((MarshalByRefObject)OrbServices.CreateProxy(typeof(MarshalByRefObject), ior), props);
            }
            else
            {
                conn = context.ConnectByAddress(hostName, hostPort, props);
            }
            context.SetDefaultConnection(conn);

            byte[]           encoded = File.ReadAllBytes(loginFile);
            SharedAuthSecret secret  = context.DecodeSharedAuth(encoded);

            conn.LoginBySharedAuth(secret);

            Assert.IsNotNull(conn.Login);
            Assert.IsNotNull(conn.Login.Value.id);
            Assert.IsNotNull(conn.Login.Value.entity);

            conn.Logout();
            Logger.Info("Fim.");
        }
コード例 #2
0
 public byte[] EncodeSharedAuth(SharedAuthSecret secret)
 {
     try {
         SharedAuthSecretImpl sharedAuth = (SharedAuthSecretImpl)secret;
         int           i             = 0;
         VersionedData?actualVersion = null;
         VersionedData?legacyVersion = null;
         if (!sharedAuth.Legacy)
         {
             // se não é legacy, tem a versão atual. Pode ter a versão legacy ou não.
             ExportedSharedAuth exportedAuth   = new ExportedSharedAuth(sharedAuth.BusId, sharedAuth.Attempt, sharedAuth.Secret);
             TypeCode           exportedAuthTC = _orb.create_tc_for_type(typeof(ExportedSharedAuth));
             Any    any     = new Any(exportedAuth, exportedAuthTC);
             byte[] encoded = _codec.encode_value(any);
             actualVersion = new VersionedData(ExportVersion.ConstVal, encoded);
             i++;
         }
         if (sharedAuth.LegacyAttempt != null)
         {
             core.v2_0.data_export.ExportedSharedAuth legacyAuth =
                 new core.v2_0.data_export.ExportedSharedAuth(sharedAuth.BusId,
                                                              sharedAuth.LegacyAttempt, sharedAuth.Secret);
             TypeCode legacyExportedAuthTC = _orb.create_tc_for_type(typeof(core.v2_0.data_export.ExportedSharedAuth));
             Any      any           = new Any(legacyAuth, legacyExportedAuthTC);
             byte[]   legacyEncoded = _codec.encode_value(any);
             legacyVersion = new VersionedData(CurrentVersion.ConstVal, legacyEncoded);
             i++;
         }
         VersionedData[] versions = new VersionedData[i];
         // A ordem das versões exportadas IMPORTA. A 2.1 deve vir antes da 2.0.
         if (legacyVersion != null)
         {
             versions[--i] = legacyVersion.Value;
         }
         if (actualVersion != null)
         {
             versions[--i] = actualVersion.Value;
         }
         return(EncodeExportedVersions(versions, _magicTagSharedAuth));
     }
     catch (InvalidTypeForEncoding e) {
         const string message =
             "Falha inesperada ao codificar uma autenticação compartilhada para exportação.";
         Logger.Error(message, e);
         throw new OpenBusInternalException(message, e);
     }
 }
コード例 #3
0
        private static void Main(String[] args)
        {
            // Obtém dados através dos argumentos
            string host      = args[0];
            ushort port      = Convert.ToUInt16(args[1]);
            string loginFile = args[2];

            ORBInitializer.InitORB();
            OpenBusContext context = ORBInitializer.Context;

            // Lê o arquivo com o segredo. Talvez seja interessante para a aplicação
            // trocar esses dados de outra forma (encriptados por exemplo).
            // Além disso, o cliente escreve apenas uma vez esses dados, que têm
            // validade igual ao lease do login dele, portanto uma outra forma mais
            // dinâmica seria mais eficaz. No entanto, isso foge ao escopo dessa demo.
            byte[]           encoded = File.ReadAllBytes(loginFile);
            SharedAuthSecret secret  = context.DecodeSharedAuth(encoded);

            // Cria conexão e a define como conexão padrão tanto para entrada como saída.
            // O uso exclusivo da conexão padrão (sem uso de current e callback de despacho) só é recomendado para aplicações que criem apenas uma conexão e desejem utilizá-la em todos os casos. Para situações diferentes, consulte o manual do SDK OpenBus e/ou outras demos.
            Connection conn = context.ConnectByAddress(host, port);

            context.SetDefaultConnection(conn);

            string helloIDLType = Repository.GetRepositoryID(typeof(Hello));

            ServiceOfferDesc[] offers = null;
            try {
                // Faz o login por autenticação compartilhada
                conn.LoginBySharedAuth(secret);
                // Faz busca utilizando propriedades geradas automaticamente e propriedades definidas pelo serviço específico
                // propriedade gerada automaticamente
                ServiceProperty autoProp =
                    new ServiceProperty("openbus.component.interface", helloIDLType);
                // propriedade definida pelo serviço hello
                ServiceProperty prop = new ServiceProperty("offer.domain",
                                                           "Demo SharedAuth");
                ServiceProperty[] properties = { prop, autoProp };
                offers = context.OfferRegistry.findServices(properties);
            }
            catch (AccessDenied) {
                Console.WriteLine(Resources.ClientAccessDenied +
                                  Resources.SharedAuthEntity);
            }
            catch (InvalidLoginProcessException) {
                Console.WriteLine(Resources.SharedAuthInvalidLoginProcessErrorMsg);
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            catch (Exception e) {
                NO_PERMISSION npe = null;
                if (e is TargetInvocationException)
                {
                    // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                    npe = e.InnerException as NO_PERMISSION;
                }
                if ((npe == null) && (!(e is NO_PERMISSION)))
                {
                    // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                    throw;
                }
                npe = npe ?? (NO_PERMISSION)e;
                if (npe.Minor == NoLoginCode.ConstVal)
                {
                    Console.WriteLine(Resources.NoLoginCodeErrorMsg);
                }
                else
                {
                    throw;
                }
            }

            // analiza as ofertas encontradas
            bool failed = true;

            if (offers != null)
            {
                if (offers.Length < 1)
                {
                    Console.WriteLine(Resources.ServiceNotFound);
                }
                else
                {
                    if (offers.Length > 1)
                    {
                        Console.WriteLine(Resources.ServiceFoundMoreThanExpected);
                    }
                    foreach (ServiceOfferDesc serviceOfferDesc in offers)
                    {
                        Console.WriteLine(Resources.ServiceFoundTesting);
                        try {
                            MarshalByRefObject helloObj =
                                serviceOfferDesc.service_ref.getFacet(helloIDLType);
                            if (helloObj == null)
                            {
                                Console.WriteLine(Resources.FacetNotFoundInOffer);
                                continue;
                            }
                            Hello hello = helloObj as Hello;
                            if (hello == null)
                            {
                                Console.WriteLine(Resources.FacetFoundWrongType);
                                continue;
                            }
                            Console.WriteLine(Resources.OfferFound);
                            // utiliza o serviço
                            hello.sayHello();
                            failed = false;
                            break;
                        }
                        catch (TRANSIENT) {
                            Console.WriteLine(Resources.ServiceTransientErrorMsg);
                        }
                        catch (COMM_FAILURE) {
                            Console.WriteLine(Resources.ServiceCommFailureErrorMsg);
                        }
                        catch (Exception e) {
                            NO_PERMISSION npe = null;
                            if (e is TargetInvocationException)
                            {
                                // caso seja uma exceção lançada pelo SDK, será uma NO_PERMISSION
                                npe = e.InnerException as NO_PERMISSION;
                            }
                            if ((npe == null) && (!(e is NO_PERMISSION)))
                            {
                                // caso não seja uma NO_PERMISSION não é uma exceção esperada então deixamos passar.
                                throw;
                            }
                            npe = npe ?? (NO_PERMISSION)e;
                            bool   found   = false;
                            string message = String.Empty;
                            switch (npe.Minor)
                            {
                            case NoLoginCode.ConstVal:
                                message = Resources.NoLoginCodeErrorMsg;
                                found   = true;
                                break;

                            case UnknownBusCode.ConstVal:
                                message = Resources.UnknownBusCodeErrorMsg;
                                found   = true;
                                break;

                            case UnverifiedLoginCode.ConstVal:
                                message = Resources.UnverifiedLoginCodeErrorMsg;
                                found   = true;
                                break;

                            case InvalidRemoteCode.ConstVal:
                                message = Resources.InvalidRemoteCodeErrorMsg;
                                found   = true;
                                break;
                            }
                            if (found)
                            {
                                Console.WriteLine(message);
                            }
                            else
                            {
                                throw;
                            }
                        }
                    }
                    if (failed)
                    {
                        Console.WriteLine(Resources.OfferFunctionalNotFound);
                    }
                }
            }

            try {
                conn.Logout();
            }
            catch (ServiceFailure e) {
                Console.WriteLine(Resources.BusServiceFailureErrorMsg);
                Console.WriteLine(e);
            }
            catch (TRANSIENT) {
                Console.WriteLine(Resources.BusTransientErrorMsg);
            }
            catch (COMM_FAILURE) {
                Console.WriteLine(Resources.BusCommFailureErrorMsg);
            }
            if (!failed)
            {
                Console.WriteLine(Resources.ClientOK);
            }
            Console.ReadKey();
        }
コード例 #4
0
        private static void Main()
        {
            string hostName         = DemoConfig.Default.busHostName;
            ushort hostPort         = DemoConfig.Default.busHostPort;
            bool   useSSL           = DemoConfig.Default.useSSL;
            string clientUser       = DemoConfig.Default.clientUser;
            string clientThumbprint = DemoConfig.Default.clientThumbprint;
            string serverUser       = DemoConfig.Default.serverUser;
            string serverThumbprint = DemoConfig.Default.serverThumbprint;
            ushort serverSSLPort    = DemoConfig.Default.serverSSLPort;
            ushort serverOpenPort   = DemoConfig.Default.serverOpenPort;
            string busIORFile       = DemoConfig.Default.busIORFile;

            if (useSSL)
            {
                Utils.InitSSLORB(clientUser, clientThumbprint, serverUser, serverThumbprint, serverSSLPort, serverOpenPort, true, true, "required", false, false);
            }
            else
            {
                ORBInitializer.InitORB();
            }

/*
 *    ConsoleAppender appender = new ConsoleAppender {
 *                                                     Threshold = Level.Off,
 *                                                     Layout =
 *                                                       new SimpleLayout(),
 *                                                   };
 *    BasicConfigurator.Configure(appender);
 */
            ConnectionProperties props   = new ConnectionPropertiesImpl();
            OpenBusContext       context = ORBInitializer.Context;
            Connection           conn;

            if (useSSL)
            {
                string ior = File.ReadAllText(busIORFile);
                conn = context.ConnectByReference((MarshalByRefObject)OrbServices.CreateProxy(typeof(MarshalByRefObject), ior), props);
            }
            else
            {
                conn = context.ConnectByAddress(hostName, hostPort, props);
            }
            context.SetDefaultConnection(conn);

            const string userLogin = "******";

            byte[] userPassword = new ASCIIEncoding().GetBytes(userLogin);
            string loginFile    = DemoConfig.Default.loginFile;

            conn.LoginByPassword(userLogin, userPassword, "testing");
            SharedAuthSecret secret = conn.StartSharedAuth();

            byte[] sharedAuth = context.EncodeSharedAuth(secret);
            File.WriteAllBytes(loginFile, sharedAuth);

            conn.Logout();
            Logger.Info("Fim.");
            Logger.Info(
                "Execute o cliente que fará o login por autenticação compartilhada.");
        }