diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index 44e5d8aa0..6556ebdba 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "10"; public const string Build = "3"; - public const string Revision = "3616"; + public const string Revision = "3617"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 44840d655..7ef5be40e 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%COREVERSION%=3 -%REVISION%=3616 %MINOR%=10 +%REVISION%=3617 +%COREVERSION%=3 %MAJOR%=3 diff --git a/PluginsSupport/Interfaces.cs b/PluginsSupport/Interfaces.cs index a54fb52d7..5bc38400b 100644 --- a/PluginsSupport/Interfaces.cs +++ b/PluginsSupport/Interfaces.cs @@ -111,6 +111,9 @@ namespace VisualPascalABCPlugins } public delegate IAsyncResult InvokeDegegate(Delegate method, params object[] args); + + public delegate string ConvertTextDelegate(string FileName, string text); // Tasks. + public interface IVisualEnvironmentCompiler { PascalABCCompiler.ICompiler Compiler @@ -143,7 +146,7 @@ namespace VisualPascalABCPlugins { get; } - + ConvertTextDelegate ConvertUnitTextProperty { get; set; } } public interface ICodeFileDocument diff --git a/Release/pabcversion.txt b/Release/pabcversion.txt index c103d1d99..586e51da3 100644 --- a/Release/pabcversion.txt +++ b/Release/pabcversion.txt @@ -1 +1 @@ -3.10.3.3616 +3.10.3.3617 diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index a173a828c..89897b84e 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.10.3.3616' +!define VERSION '3.10.3.3617' diff --git a/TestSuite/CompilationSamples/LightPT.pas b/TestSuite/CompilationSamples/LightPT.pas index bff538f54..d3051b0e1 100644 --- a/TestSuite/CompilationSamples/LightPT.pas +++ b/TestSuite/CompilationSamples/LightPT.pas @@ -610,6 +610,9 @@ procedure SetMessagesOn; /// Выключить дополнительные сообщения о записи в удаленную базу данных procedure SetMessageOff; +/// Шифрование строки +function EncryptString(src: string): string; + implementation uses __RedirectIOMode; @@ -1041,6 +1044,12 @@ begin Result := ms.ToArray; end; +function EncryptString(src: string): string; +begin + var bytes := Encrypt(src); + Result := Convert.ToBase64String(bytes); +end; + function Decrypt(data: array of byte): string; begin if data = nil then diff --git a/VisualPascalABCNET/DS/VisualEnvironmentCompiler.cs b/VisualPascalABCNET/DS/VisualEnvironmentCompiler.cs index 2d4aa4f41..0405df955 100644 --- a/VisualPascalABCNET/DS/VisualEnvironmentCompiler.cs +++ b/VisualPascalABCNET/DS/VisualEnvironmentCompiler.cs @@ -34,6 +34,8 @@ namespace VisualPascalABC public delegate void SetFlagDelegate(bool flag); private SetFlagDelegate SetCompilingButtonsEnabled; private SetFlagDelegate SetDebugButtonsEnabled; + public ConvertTextDelegate ConvertUnitTextProperty { get; set; } + public delegate void SetTextDelegate(string text); private SetTextDelegate SetStateText; private SetTextDelegate AddTextToCompilerMessages; @@ -247,13 +249,21 @@ namespace VisualPascalABC { case PascalABCCompiler.SourceFileOperation.GetText: if (tp != null) - return ed.Document.TextContent; + { + string Text1 = ed.Document.TextContent; + if (ConvertUnitTextProperty != null) + Text1 = ConvertUnitTextProperty(FileName, Text1); + return Text1; + } + if (!File.Exists(FileName)) return null; /*TextReader tr = new StreamReader(file_name, System.Text.Encoding.GetEncoding(1251)); string Text = tr.ReadToEnd(); tr.Close();*/ string Text = PascalABCCompiler.FileReader.ReadFileContent(FileName, null); + if (ConvertUnitTextProperty != null) + Text = ConvertUnitTextProperty(FileName, Text); return Text; case PascalABCCompiler.SourceFileOperation.Exists: if (tp != null) diff --git a/VisualPascalABCNETLinux/DS/VisualEnvironmentCompiler.cs b/VisualPascalABCNETLinux/DS/VisualEnvironmentCompiler.cs index 868cf4089..ef425d46a 100644 --- a/VisualPascalABCNETLinux/DS/VisualEnvironmentCompiler.cs +++ b/VisualPascalABCNETLinux/DS/VisualEnvironmentCompiler.cs @@ -34,6 +34,7 @@ namespace VisualPascalABC private SetFlagDelegate SetCompilingButtonsEnabled; private SetFlagDelegate SetDebugButtonsEnabled; public delegate void SetTextDelegate(string text); + public delegate string ConvertUnitText(string FileName, string text); // Это пока только для шифрованного Tasks. В остальных случаях он нулевой private SetTextDelegate SetStateText; private SetTextDelegate AddTextToCompilerMessages; private bool Compilation = false; @@ -249,9 +250,6 @@ namespace VisualPascalABC return ed.Document.TextContent; if (!File.Exists(FileName)) return null; - /*TextReader tr = new StreamReader(file_name, System.Text.Encoding.GetEncoding(1251)); - string Text = tr.ReadToEnd(); - tr.Close();*/ string Text = PascalABCCompiler.FileReader.ReadFileContent(FileName, null); return Text; case PascalABCCompiler.SourceFileOperation.Exists: diff --git a/VisualPlugins/TraningControlPlugin/TeacherControlPlugin.cs b/VisualPlugins/TraningControlPlugin/TeacherControlPlugin.cs index 277c2cffa..545f37554 100644 --- a/VisualPlugins/TraningControlPlugin/TeacherControlPlugin.cs +++ b/VisualPlugins/TraningControlPlugin/TeacherControlPlugin.cs @@ -4,6 +4,8 @@ using System.Windows.Forms; using System.IO; using VisualPascalABCPlugins.DBAccess; using PascalABCCompiler; +using System.Linq; +using static System.Net.Mime.MediaTypeNames; namespace VisualPascalABCPlugins { @@ -53,6 +55,23 @@ namespace VisualPascalABCPlugins TryChangeServerAddress(ref ServerAddress); User.ServAddr = ServerAddress; loginForm = new LoginForm(this); + VisualEnvironmentCompiler.ConvertUnitTextProperty = (FileName, Text) => + { + string fname = Path.GetFileNameWithoutExtension(FileName); + if (fname == "Tasks") + { + int newLinePos = Text.IndexOf('\n'); + string firstLine = newLinePos == -1 ? Text : Text.Substring(0, newLinePos); + if (firstLine.Contains("encrypted")) + { + string remainingText = Text.Substring(newLinePos + 1); + Text = TeacherPluginUtils.DecryptString(remainingText); + } + + return Text; + } + return Text; + }; } // RegisterForm.VisualEnvironmentCompiler = VisualEnvironmentCompiler; // Пока форма регистрации никак не связана с компилятором @@ -63,24 +82,6 @@ namespace VisualPascalABCPlugins //Workbench.ServiceContainer.BuildService.BeforeCompile += BeforeCompileHandler; } - public object TeacherSourceFilesProvider(string FileName, SourceFileOperation FileOperation) - { - switch (FileOperation) - { - case SourceFileOperation.GetText: - if (!File.Exists(FileName)) return null; - string Text = FileReader.ReadFileContent(FileName, null); - // Здесь можно дешифровать когда надо - //File.AppendAllText("d:\\aaaa.txt", FileName + "\n"); - return Text; - case SourceFileOperation.Exists: - return File.Exists(FileName); - case SourceFileOperation.GetLastWriteTime: - return File.GetLastWriteTime(FileName); - } - return null; - } - public void Execute() { loginForm.SiteProvider = User; diff --git a/VisualPlugins/TraningControlPlugin/TeacherPluginUtils.cs b/VisualPlugins/TraningControlPlugin/TeacherPluginUtils.cs index 24453479d..6104a938a 100644 --- a/VisualPlugins/TraningControlPlugin/TeacherPluginUtils.cs +++ b/VisualPlugins/TraningControlPlugin/TeacherPluginUtils.cs @@ -41,6 +41,12 @@ namespace VisualPascalABCPlugins } return encrypted; } + public static string EncryptString(string src) + { + var bytes = Encrypt(src); + return Convert.ToBase64String(bytes); + } + public static string Decrypt(byte[] data) { @@ -59,6 +65,12 @@ namespace VisualPascalABCPlugins return text; } + public static string DecryptString(string data) + { + var bytes = Convert.FromBase64String(data); + return Decrypt(bytes); + } + public static string[] ReadLoginPassFromAuth(string AuthFileFullName) { // Исключения обрабатываются уровнем выше diff --git a/bin/Lib/LightPT.pas b/bin/Lib/LightPT.pas index bff538f54..d3051b0e1 100644 --- a/bin/Lib/LightPT.pas +++ b/bin/Lib/LightPT.pas @@ -610,6 +610,9 @@ procedure SetMessagesOn; /// Выключить дополнительные сообщения о записи в удаленную базу данных procedure SetMessageOff; +/// Шифрование строки +function EncryptString(src: string): string; + implementation uses __RedirectIOMode; @@ -1041,6 +1044,12 @@ begin Result := ms.ToArray; end; +function EncryptString(src: string): string; +begin + var bytes := Encrypt(src); + Result := Convert.ToBase64String(bytes); +end; + function Decrypt(data: array of byte): string; begin if data = nil then