コード例 #1
0
 public SharedAuthSecret DecodeSharedAuth(byte[] encoded)
 {
     try {
         VersionedData[] versions = DecodeExportedVersions(encoded,
                                                           _magicTagSharedAuth);
         SharedAuthSecretImpl sharedAuth = null;
         for (int i = 0; i < versions.Length; i++)
         {
             // Se houver duas versões, a versão atual virá antes da versão legacy.
             if (versions[i].version == ExportVersion.ConstVal)
             {
                 TypeCode exportedAuthTypeCode =
                     ORB.create_tc_for_type(typeof(ExportedSharedAuth));
                 ExportedSharedAuth exportedAuth =
                     (ExportedSharedAuth)
                     _codec.decode_value(versions[i].encoded, exportedAuthTypeCode);
                 if (sharedAuth == null)
                 {
                     sharedAuth = new SharedAuthSecretImpl(exportedAuth.bus, exportedAuth.attempt, exportedAuth.secret, null);
                 }
                 else
                 {
                     sharedAuth.Attempt = exportedAuth.attempt;
                 }
             }
             if (versions[i].version == CurrentVersion.ConstVal)
             {
                 TypeCode exportedAuthTypeCode =
                     ORB.create_tc_for_type(typeof(core.v2_0.data_export.ExportedSharedAuth));
                 core.v2_0.data_export.ExportedSharedAuth exportedAuth =
                     (core.v2_0.data_export.ExportedSharedAuth)
                     _codec.decode_value(versions[i].encoded, exportedAuthTypeCode);
                 if (sharedAuth == null)
                 {
                     sharedAuth = new SharedAuthSecretImpl(exportedAuth.bus, null, exportedAuth.secret, exportedAuth.attempt);
                 }
                 else
                 {
                     sharedAuth.LegacyAttempt = exportedAuth.attempt;
                 }
             }
         }
         if (sharedAuth != null)
         {
             return(sharedAuth);
         }
     }
     catch (GenericUserException e) {
         const string message =
             "Falha inesperada ao decodificar uma autenticação compartilhada exportada.";
         Logger.Error(message, e);
         throw new InvalidEncodedStreamException(message, e);
     }
     throw new InvalidEncodedStreamException("Versão de autenticação compartilhada incompatível.");
 }
コード例 #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);
     }
 }