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."); }
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); } }
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(); }
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."); }