Welcome to mirror list, hosted at ThFree Co, Russian Federation.

SqlDatabaseMetaDataRetriever.cs « MsSql « ConnectionSerializers « Serializers « Config « mRemoteNG - github.com/mRemoteNG/mRemoteNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 1252fb28032951bf05a7baec4195e9a357623df4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
using System;
using System.Data.Common;
using System.Globalization;
using mRemoteNG.App;
using mRemoteNG.App.Info;
using mRemoteNG.Config.DatabaseConnectors;
using mRemoteNG.Messages;
using mRemoteNG.Security;
using mRemoteNG.Security.SymmetricEncryption;
using mRemoteNG.Tools;
using mRemoteNG.Tree.Root;

namespace mRemoteNG.Config.Serializers.ConnectionSerializers.MsSql
{
    public class SqlDatabaseMetaDataRetriever
    {
        public SqlConnectionListMetaData GetDatabaseMetaData(IDatabaseConnector databaseConnector)
        {
            SqlConnectionListMetaData metaData;
            DbDataReader dbDataReader = null;

            try
            {
                var dbCommand = databaseConnector.DbCommand("SELECT * FROM tblRoot");
                if (!databaseConnector.IsConnected)
                    databaseConnector.Connect();
                dbDataReader = dbCommand.ExecuteReader();
                if (!dbDataReader.HasRows)
                    return null; // assume new empty database
                else
                    dbDataReader.Read();

                metaData = new SqlConnectionListMetaData
                {
                    Name = dbDataReader["Name"] as string ?? "",
                    Protected = dbDataReader["Protected"] as string ?? "",
                    Export = (bool)dbDataReader["Export"],
                    ConfVersion =
                        new Version(Convert.ToString(dbDataReader["confVersion"], CultureInfo.InvariantCulture))
                };
            }
            catch (Exception ex)
            {
                Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"Retrieving database version failed. {ex}");
                throw;
            }
            finally
            {
                if (dbDataReader != null && !dbDataReader.IsClosed)
                    dbDataReader.Close();
            }

            return metaData;
        }

        public void WriteDatabaseMetaData(RootNodeInfo rootTreeNode, IDatabaseConnector databaseConnector)
        {
	        var cryptographyProvider = new LegacyRijndaelCryptographyProvider();
	        string strProtected;
	        if (rootTreeNode != null)
	        {
		        if (rootTreeNode.Password)
		        {
			        var password = rootTreeNode.PasswordString.ConvertToSecureString();
			        strProtected = cryptographyProvider.Encrypt("ThisIsProtected", password);
		        }
		        else
		        {
			        strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
		        }
	        }
	        else
	        {
		        strProtected = cryptographyProvider.Encrypt("ThisIsNotProtected", Runtime.EncryptionKey);
	        }

            var cmd = databaseConnector.DbCommand("DELETE FROM tblRoot");
            cmd.ExecuteNonQuery();

	        if (rootTreeNode != null)
	        {
		        cmd = databaseConnector.DbCommand(
                        "INSERT INTO tblRoot (Name, Export, Protected, ConfVersion) VALUES('" +
				        MiscTools.PrepareValueForDB(rootTreeNode.Name) + "', 0, '" + strProtected + "','" +
				        ConnectionsFileInfo.ConnectionFileVersion.ToString() + "')");
		        cmd.ExecuteNonQuery();
	        }
	        else
	        {
		        Runtime.MessageCollector.AddMessage(MessageClass.ErrorMsg, $"UpdateRootNodeTable: rootTreeNode was null. Could not insert!");
	        }
		}
    }
}