Skip to content

Commit 14157f1

Browse files
committed
Add an option to enable/disable key links during publish
1 parent f56b246 commit 14157f1

File tree

6 files changed

+53
-16
lines changed

6 files changed

+53
-16
lines changed

KeyManager.Library.UI/Properties/Resources.Designer.cs

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

KeyManager.Library.UI/Properties/Resources.fr.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,9 @@
486486
<data name="RandomLength" xml:space="preserve">
487487
<value>Taille aléatoire</value>
488488
</data>
489+
<data name="ResolveKeyLinks" xml:space="preserve">
490+
<value>Résoudre la liaison des clés</value>
491+
</data>
489492
<data name="Salt" xml:space="preserve">
490493
<value>Sel</value>
491494
</data>

KeyManager.Library.UI/Properties/Resources.resx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,9 @@
486486
<data name="RandomLength" xml:space="preserve">
487487
<value>Random Length</value>
488488
</data>
489+
<data name="ResolveKeyLinks" xml:space="preserve">
490+
<value>Resolve Key links</value>
491+
</data>
489492
<data name="Salt" xml:space="preserve">
490493
<value>Salt</value>
491494
</data>

KeyManager.Library.UI/PublishKeyStoreDialog.xaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,13 @@
2424
<TabItem Header="{x:Static properties:Resources.Options}">
2525
<StackPanel>
2626
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="5">
27-
<ToggleButton IsChecked="{Binding Properties.Options.GenerateKeys}" Style="{StaticResource MaterialDesignSwitchLightToggleButton}" />
27+
<ToggleButton IsChecked="{Binding Options.GenerateKeys}" Style="{StaticResource MaterialDesignSwitchLightToggleButton}" />
2828
<TextBlock Text="{x:Static properties:Resources.GenerateKeyEntries}" Padding="3" />
2929
</StackPanel>
30+
<StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="5">
31+
<ToggleButton IsChecked="{Binding Options.ResolveKeyLinks}" Style="{StaticResource MaterialDesignSwitchLightToggleButton}" />
32+
<TextBlock Text="{x:Static properties:Resources.ResolveKeyLinks}" Padding="3" />
33+
</StackPanel>
3034
<Expander HorizontalAlignment="Stretch" Header="{x:Static properties:Resources.WrappingKey}" Margin="5">
3135
<StackPanel Orientation="Vertical" TextBlock.Foreground="{DynamicResource MaterialDesignBody}" Margin="24,8,24,16">
3236
<local:KeyEntryIdControl KeyEntryId="{Binding Options.WrappingKey.KeyId, Mode=TwoWay}" />

KeyManager.Library/KeyStore/KeyStore.cs

Lines changed: 25 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -261,28 +261,36 @@ public virtual async Task Publish(KeyStore store, Func<string, KeyStore?> getFav
261261
entry.Identifier = entry.Identifier.Clone(Attributes);
262262
if (entry.Link != null && entry.Link.KeyIdentifier.IsConfigured() && !string.IsNullOrEmpty(entry.Link.KeyStoreFavorite))
263263
{
264-
var cryptogram = new KeyEntryCryptogram
264+
if ((Options?.ResolveKeyLinks).GetValueOrDefault(true))
265265
{
266-
Identifier = id
267-
// TODO: we may want to have a different wrapping key per Cryptogram later on
268-
};
269-
270-
var ks = getFavoriteKeyStore(entry.Link.KeyStoreFavorite);
271-
if (ks != null)
272-
{
273-
await ks.Open();
274-
var divContext = new DivInput.DivInputContext
266+
var cryptogram = new KeyEntryCryptogram
275267
{
276-
KeyStore = ks,
277-
KeyEntry = entry
268+
Identifier = id
269+
// TODO: we may want to have a different wrapping key per Cryptogram later on
278270
};
279-
cryptogram.Value = await ks.ResolveKeyEntryLink(entry.Link.KeyIdentifier.Clone(Attributes), keClass, ComputeDivInput(divContext, entry.Link.DivInput), entry.Link.WrappingKey);
280-
await ks.Close();
271+
272+
var ks = getFavoriteKeyStore(entry.Link.KeyStoreFavorite);
273+
if (ks != null)
274+
{
275+
await ks.Open();
276+
var divContext = new DivInput.DivInputContext
277+
{
278+
KeyStore = ks,
279+
KeyEntry = entry
280+
};
281+
cryptogram.Value = await ks.ResolveKeyEntryLink(entry.Link.KeyIdentifier.Clone(Attributes), keClass, ComputeDivInput(divContext, entry.Link.DivInput), entry.Link.WrappingKey);
282+
await ks.Close();
283+
}
284+
changes.Add(cryptogram);
285+
}
286+
else
287+
{
288+
changes.Add(entry);
281289
}
282290
}
283291
else
284292
{
285-
if (entry.Variant != null)
293+
if ((Options?.ResolveKeyLinks).GetValueOrDefault(true) && entry.Variant != null)
286294
{
287295
foreach (var kv in entry.Variant.KeyContainers)
288296
{
@@ -301,6 +309,8 @@ public virtual async Task Publish(KeyStore store, Func<string, KeyStore?> getFav
301309
kv.Key.SetAggregatedValueAsString(await ks.ResolveKeyLink(kv.Key.Link.KeyIdentifier.Clone(Attributes), keClass, kv.Key.Link.ContainerSelector, ComputeDivInput(divContext, kv.Key.Link.DivInput)));
302310
await ks.Close();
303311
}
312+
// We remove link information from the being pushed key entry
313+
kv.Key.Link = new KeyLink();
304314
}
305315
}
306316
}

KeyManager.Library/KeyStore/StoreOptions.cs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ public class StoreOptions : ObservableObject
77
public StoreOptions()
88
{
99
_wrappingKey = new WrappingKey();
10+
_resolveKeyLinks = true;
1011
}
1112

1213
private WrappingKey _wrappingKey;
@@ -22,5 +23,12 @@ public bool GenerateKeys
2223
get => _generateKeys;
2324
set => SetProperty(ref _generateKeys, value);
2425
}
26+
27+
private bool _resolveKeyLinks;
28+
public bool ResolveKeyLinks
29+
{
30+
get => _resolveKeyLinks;
31+
set => SetProperty(ref _resolveKeyLinks, value);
32+
}
2533
}
2634
}

0 commit comments

Comments
 (0)