16
16
import java .io .IOException ;
17
17
import java .nio .charset .StandardCharsets ;
18
18
import java .nio .file .Files ;
19
+ import java .nio .file .NoSuchFileException ;
19
20
import java .nio .file .Path ;
20
21
import java .util .Optional ;
21
22
import org .apache .logging .log4j .LogManager ;
@@ -34,14 +35,6 @@ public GraffitiManager(final DataDirLayout dataDirLayout) {
34
35
this .graffitiPath = createManagementDirectory (dataDirLayout );
35
36
}
36
37
37
- public Optional <String > setGraffiti (final BLSPublicKey publicKey , final String graffiti ) {
38
- return updateGraffiti (publicKey , graffiti .strip ());
39
- }
40
-
41
- public Optional <String > deleteGraffiti (final BLSPublicKey publicKey ) {
42
- return updateGraffiti (publicKey );
43
- }
44
-
45
38
private Path createManagementDirectory (final DataDirLayout dataDirLayout ) {
46
39
final Path graffitiDirectory = dataDirLayout .getValidatorDataDirectory ().resolve (GRAFFITI_DIR );
47
40
if (!graffitiDirectory .toFile ().exists () && !graffitiDirectory .toFile ().mkdirs ()) {
@@ -51,22 +44,19 @@ private Path createManagementDirectory(final DataDirLayout dataDirLayout) {
51
44
return graffitiDirectory ;
52
45
}
53
46
54
- private Optional <String > updateGraffiti (final BLSPublicKey publicKey ) {
55
- return updateGraffiti (publicKey , "" );
56
- }
57
-
58
- private Optional <String > updateGraffiti (final BLSPublicKey publicKey , final String graffiti ) {
59
- final int graffitiSize = graffiti .getBytes (StandardCharsets .UTF_8 ).length ;
47
+ public Optional <String > setGraffiti (final BLSPublicKey publicKey , final String graffiti ) {
48
+ final String strippedGraffiti = graffiti .strip ();
49
+ final int graffitiSize = strippedGraffiti .getBytes (StandardCharsets .UTF_8 ).length ;
60
50
if (graffitiSize > 32 ) {
61
51
throw new IllegalArgumentException (
62
52
String .format (
63
53
"'%s' converts to %s bytes. Input must be 32 bytes or less." ,
64
- graffiti , graffitiSize ));
54
+ strippedGraffiti , graffitiSize ));
65
55
}
66
56
67
57
try {
68
58
final Path file = graffitiPath .resolve (resolveFileName (publicKey ));
69
- Files .writeString (file , graffiti );
59
+ Files .writeString (file , strippedGraffiti );
70
60
} catch (IOException e ) {
71
61
final String errorMessage =
72
62
String .format ("Unable to update graffiti for validator %s" , publicKey );
@@ -76,25 +66,37 @@ private Optional<String> updateGraffiti(final BLSPublicKey publicKey, final Stri
76
66
return Optional .empty ();
77
67
}
78
68
69
+ public Optional <String > deleteGraffiti (final BLSPublicKey publicKey ) {
70
+ final Path file = graffitiPath .resolve (resolveFileName (publicKey ));
71
+
72
+ try {
73
+ Files .delete (file );
74
+ return Optional .empty ();
75
+ } catch (NoSuchFileException e ) {
76
+ throw new IllegalArgumentException (
77
+ "Saved graffiti does not exist for validator " + publicKey );
78
+ } catch (IOException e ) {
79
+ final String errorMessage =
80
+ String .format ("Unable to delete graffiti for validator %s" , publicKey );
81
+ LOG .error (errorMessage , e );
82
+ return Optional .of (errorMessage );
83
+ }
84
+ }
85
+
79
86
public Optional <Bytes32 > getGraffiti (final BLSPublicKey publicKey ) {
80
87
final Path filePath = graffitiPath .resolve (resolveFileName (publicKey ));
81
88
if (!filePath .toFile ().exists ()) {
82
89
return Optional .empty ();
83
90
}
84
91
85
92
try {
86
- return Optional .of (GraffitiParser .loadFromFile (filePath )). filter ( this :: graffitiNotEmpty ) ;
93
+ return Optional .of (GraffitiParser .loadFromFile (filePath ));
87
94
} catch (GraffitiLoaderException | IllegalArgumentException e ) {
88
95
LOG .error ("Unable to read graffiti from storage." , e );
89
96
return Optional .empty ();
90
97
}
91
98
}
92
99
93
- private boolean graffitiNotEmpty (final Bytes32 graffiti ) {
94
- final Bytes32 emptyBytesParsed = Bytes32Parser .toBytes32 (new byte [0 ]);
95
- return !graffiti .equals (emptyBytesParsed );
96
- }
97
-
98
100
private String resolveFileName (final BLSPublicKey publicKey ) {
99
101
return publicKey .toSSZBytes ().toUnprefixedHexString () + ".txt" ;
100
102
}
0 commit comments