Skip to content

Commit

Permalink
Obfuscate secret values
Browse files Browse the repository at this point in the history
Split into two apps
  • Loading branch information
ajkauffmann committed Feb 3, 2020
1 parent 13b5815 commit a281e24
Show file tree
Hide file tree
Showing 26 changed files with 728 additions and 209 deletions.
File renamed without changes.
4 changes: 0 additions & 4 deletions App/.vscode/settings.json

This file was deleted.

3 changes: 0 additions & 3 deletions App/AppSourceCop.json

This file was deleted.

79 changes: 0 additions & 79 deletions App/src/SecretValue/SecretValue.Table.al

This file was deleted.

15 changes: 15 additions & 0 deletions App/.vscode/launch.json → DemoSecretValues/.vscode/launch.json
@@ -1,6 +1,21 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Attach Your own server",
"type": "al",
"request": "attach",
"server": "http://bcsandbox",
"serverInstance": "BC",
"authentication": "UserPassword",
"breakOnError": true,
"breakOnRecordWrite": false,
"enableSqlInformationDebugger": true,
"enableLongRunningSqlStatements": true,
"longRunningSqlStatementsThreshold": 500,
"numberOfSqlStatements": 10,
"breakOnNext": "Background"
},
{
"name": "Publish: Microsoft cloud sandbox",
"type": "al",
Expand Down
4 changes: 4 additions & 0 deletions DemoSecretValues/AppSourceCop.json
@@ -0,0 +1,4 @@
{
"mandatoryAffixes": ["AJK"],
"supportedCountries": ["US"]
}
84 changes: 84 additions & 0 deletions DemoSecretValues/Translations/Demo Secret Values.g.xlf
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 xliff-core-1.2-transitional.xsd">
<file datatype="xml" source-language="en-US" target-language="en-US" original="Demo Secret Values">
<body>
<group id="body">
<trans-unit id="Table 2142571007 - Field 2333076789 - Property 2879900210" size-unit="char" translate="yes" xml:space="preserve">
<source>Primary Key</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Table SecretValueAJK - Field PrimaryKey - Property Caption</note>
</trans-unit>
<trans-unit id="Table 2142571007 - Field 937829096 - Property 2879900210" size-unit="char" translate="yes" xml:space="preserve">
<source>Secret Value 1</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Table SecretValueAJK - Field SecretValue1 - Property Caption</note>
</trans-unit>
<trans-unit id="Table 2142571007 - Field 1575525713 - Property 2879900210" size-unit="char" translate="yes" xml:space="preserve">
<source>Secret Value 2</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Table SecretValueAJK - Field SecretValue2 - Property Caption</note>
</trans-unit>
<trans-unit id="Table 2142571007 - Field 2213222330 - Property 2879900210" size-unit="char" translate="yes" xml:space="preserve">
<source>Secret Value 3</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Table SecretValueAJK - Field SecretValue3 - Property Caption</note>
</trans-unit>
<trans-unit id="Codeunit 2142571007 - NamedType 657241101" size-unit="char" translate="yes" xml:space="preserve">
<source>6c33fba1-ae4b-40b9-b805-ee04f6f5be87</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Codeunit SecretValueAJK - NamedType IsolatedStorageKeyTxt</note>
</trans-unit>
<trans-unit id="Codeunit 2142571007 - NamedType 1453015226" size-unit="char" translate="yes" xml:space="preserve">
<source>Length of secret value may not exceed 215 characters</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Codeunit SecretValueAJK - NamedType SecretValueTooLongErr</note>
</trans-unit>
<trans-unit id="Codeunit 2142571007 - NamedType 1563182977" size-unit="char" translate="yes" xml:space="preserve">
<source>Could not find the secret value.</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Codeunit SecretValueAJK - NamedType NoSecretValueFoundErr</note>
</trans-unit>
<trans-unit id="Codeunit 2142571007 - NamedType 365378788" size-unit="char" translate="yes" xml:space="preserve">
<source>This function can ony be called during installation or upgrade.</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Codeunit SecretValueAJK - NamedType ExecutionContextErr</note>
</trans-unit>
<trans-unit id="Page 3033711234 - Property 2879900210" size-unit="char" translate="yes" xml:space="preserve">
<source>Random Text</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Page RandomTextAJK - Property Caption</note>
</trans-unit>
<trans-unit id="Page 3033711234 - Control 1111949503 - Property 2879900210" size-unit="char" translate="yes" xml:space="preserve">
<source>Length</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Page RandomTextAJK - Control RandomTextLengthControl - Property Caption</note>
</trans-unit>
<trans-unit id="Page 3033711234 - Control 1111949503 - Property 1295455071" size-unit="char" translate="yes" xml:space="preserve">
<source> </source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Page RandomTextAJK - Control RandomTextLengthControl - Property ToolTip</note>
</trans-unit>
<trans-unit id="Page 3033711234 - Control 1181620363 - Property 2879900210" size-unit="char" translate="yes" xml:space="preserve">
<source>Random Text</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Page RandomTextAJK - Control RandomTextControl - Property Caption</note>
</trans-unit>
<trans-unit id="Page 3033711234 - Control 1181620363 - Property 1295455071" size-unit="char" translate="yes" xml:space="preserve">
<source> </source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Page RandomTextAJK - Control RandomTextControl - Property ToolTip</note>
</trans-unit>
<trans-unit id="Page 3033711234 - Action 1676079074 - Property 2879900210" size-unit="char" translate="yes" xml:space="preserve">
<source>Get Random Text</source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Page RandomTextAJK - Action GetRandomTextAction - Property Caption</note>
</trans-unit>
<trans-unit id="Page 3033711234 - Action 1676079074 - Property 1295455071" size-unit="char" translate="yes" xml:space="preserve">
<source> </source>
<note from="Developer" annotates="general" priority="2"></note>
<note from="Xliff Generator" annotates="general" priority="3">Page RandomTextAJK - Action GetRandomTextAction - Property ToolTip</note>
</trans-unit>
</group>
</body>
</file>
</xliff>
15 changes: 11 additions & 4 deletions App/app.json → DemoSecretValues/app.json
Expand Up @@ -9,7 +9,7 @@
"EULA": "http://eula",
"help": "http://help",
"url": "http://url",
"logo": "Images/AppLogo.jpg",
"logo": "../Resources/Images/AppLogo.jpg",
"dependencies": [
{
"appId": "63ca2fa4-4f03-4f2b-a480-172fef340d3f",
Expand All @@ -28,13 +28,20 @@
"platform": "15.0.0.0",
"idRanges": [
{
"from": 70455525,
"to": 70455535
"from": 60250,
"to": 60259
}
],
"contextSensitiveHelpUrl": "https://App.com/help/",
"showMyCode": true,
"runtime": "4.0",
"target": "Cloud",
"features": ["TranslationFile","ExcludeGeneratedTranslations"]
"features": ["TranslationFile","ExcludeGeneratedTranslations"],
"internalsVisibleTo": [
{
"appId": "a9e18554-682c-42c0-a3bf-7427ce225bfb",
"name": "Demo Secret Values Management",
"publisher": "Arend-Jan Kauffmann"
}
]
}
File renamed without changes.
@@ -1,4 +1,4 @@
page 70455526 RandomTextAJK
page 60250 RandomTextAJK
{
Caption = 'Random Text';
PageType = Card;
Expand Down
@@ -1,4 +1,4 @@
codeunit 70455529 RandomTextMgtAJK
codeunit 60253 RandomTextMgtAJK
{
procedure GenerateRandomText(Length: Integer) RandomText: Text
var
Expand Down
@@ -1,4 +1,4 @@
codeunit 70455526 SecretValueAJK
codeunit 60250 SecretValueAJK
{
Access = Internal;

Expand All @@ -8,18 +8,15 @@ codeunit 70455526 SecretValueAJK
NoSecretValueFoundErr: Label 'Could not find the secret value.';
ExecutionContextErr: Label 'This function can ony be called during installation or upgrade.';

[NonDebuggable]
[EventSubscriber(ObjectType::Codeunit, Codeunit::SecretValueMgtAJK, 'OnSetSecretValue', '', false, false)]
local procedure SetSecretValue(SecretValue: Text[215])
begin
StoreSecretValueInIsolatedStorage(SecretValue);
end;

[NonDebuggable]
procedure ImportSecretValue()
var
SecretValue: Record SecretValueAJK;
begin
if not (GetCurrentModuleExecutionContext() in [ExecutionContext::Install, ExecutionContext::Upgrade]) then
Error(ExecutionContextErr);
SecretValue.DeleteAll();
NavApp.LoadPackageData(Database::SecretValueAJK);
MoveSecretValueToIsolatedStorage();
end;
Expand All @@ -33,7 +30,7 @@ codeunit 70455526 SecretValueAJK
if not SecretValue.FindFirst() then
exit;

SecretValueText := SecretValue.GetSecretTextValue(2);
SecretValueText := SecretValue.GetSecretTextValue();
if SecretValueText = '' then
exit;
StoreSecretValueInIsolatedStorage(SecretValueText);
Expand All @@ -56,32 +53,32 @@ codeunit 70455526 SecretValueAJK
end;

[NonDebuggable]
[EventSubscriber(ObjectType::Codeunit, Codeunit::SecretValueMgtAJK, 'OnPrepareSecretValueTableForExport', '', false, false)]
local procedure PrepareSecretValueTableForExport()
var
SecretValue: Record SecretValueAJK;
RandomTextMgt: Codeunit RandomTextMgtAJK;
procedure GetSecretValueFromIsolatedStorage() SecretValue: Text
begin
SecretValue.DeleteAll();
SecretValue.SetSecretTextValue(1, RandomTextMgt.GenerateRandomText(50));
SecretValue.SetSecretTextValue(2, GetSecretValue());
SecretValue.SetSecretTextValue(3, RandomTextMgt.GenerateRandomText(50));
SecretValue.Insert();
if not IsolatedStorage.Get(IsolatedStorageKeyTxt, DataScope::Module, SecretValue) then
Error(NoSecretValueFoundErr);
end;

[NonDebuggable]
[EventSubscriber(ObjectType::Codeunit, Codeunit::SecretValueMgtAJK, 'OnRemoveSecretValueTableData', '', false, false)]
local procedure RemoveSecretValueTableData()
procedure SetSecretValue(SecretValue: Text[215])
begin
StoreSecretValueInIsolatedStorage(SecretValue);
end;

[NonDebuggable]
procedure PrepareSecretValueTableForExport()
var
SecretValue: Record SecretValueAJK;
begin
SecretValue.DeleteAll();
SecretValue.SetSecretTextValue(GetSecretValueFromIsolatedStorage());
end;

[NonDebuggable]
procedure GetSecretValue() SecretValue: Text
procedure RemoveSecretValueTableData()
var
SecretValue: Record SecretValueAJK;
begin
if not IsolatedStorage.Get(IsolatedStorageKeyTxt, DataScope::Module, SecretValue) then
Error(NoSecretValueFoundErr);
SecretValue.DeleteAll();
end;

}

0 comments on commit a281e24

Please sign in to comment.