1 package org.apache.maven.plugins.enforcer;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.FileInputStream;
24 import java.io.IOException;
25 import java.io.InputStream;
26
27 import org.apache.commons.codec.digest.DigestUtils;
28 import org.apache.maven.enforcer.rule.api.EnforcerRuleException;
29 import org.apache.maven.enforcer.rule.api.EnforcerRuleHelper;
30 import org.codehaus.plexus.util.IOUtil;
31
32
33
34
35
36
37
38 public class RequireFileChecksum
39 extends AbstractNonCacheableEnforcerRule
40 {
41
42 private File file;
43
44 private String checksum;
45
46 private String type;
47
48 @Override
49 public void execute( EnforcerRuleHelper helper )
50 throws EnforcerRuleException
51 {
52 if ( this.file == null )
53 {
54 throw new EnforcerRuleException( "Input file unspecified" );
55 }
56
57 if ( this.type == null )
58 {
59 throw new EnforcerRuleException( "Hash type unspecified" );
60 }
61
62 if ( this.checksum == null )
63 {
64 throw new EnforcerRuleException( "Checksum unspecified" );
65 }
66
67 InputStream inputStream = null;
68 try
69 {
70 if ( this.file.isDirectory() || !this.file.canRead() )
71 {
72 throw new EnforcerRuleException( "Cannot read file: " + this.file.getAbsolutePath() );
73 }
74
75 inputStream = new FileInputStream( this.file );
76 String checksum;
77 if ( "md5".equals( this.type ) )
78 {
79 checksum = DigestUtils.md5Hex( inputStream );
80 }
81 else if ( "sha1".equals( this.type ) )
82 {
83 checksum = DigestUtils.shaHex( inputStream );
84 }
85 else if ( "sha256".equals( this.type ) )
86 {
87 checksum = DigestUtils.sha256Hex( inputStream );
88 }
89 else if ( "sha384".equals( this.type ) )
90 {
91 checksum = DigestUtils.sha384Hex( inputStream );
92 }
93 else if ( "sha512".equals( this.type ) )
94 {
95 checksum = DigestUtils.sha512Hex( inputStream );
96 }
97 else
98 {
99 throw new EnforcerRuleException( "Unsupported hash type: " + this.type );
100 }
101 if ( !checksum.equalsIgnoreCase( this.checksum ) )
102 {
103 throw new EnforcerRuleException( this.type + " hash of " + this.file + " was " + checksum
104 + " but expected " + this.checksum );
105 }
106 }
107 catch ( IOException e )
108 {
109 throw new EnforcerRuleException( "Unable to calculate checksum", e );
110 }
111 finally
112 {
113 IOUtil.close( inputStream );
114 }
115 }
116
117
118
119
120
121
122 public void setFile( File file )
123 {
124 this.file = file;
125 }
126
127
128
129
130
131
132 public void setChecksum( String checksum )
133 {
134 this.checksum = checksum;
135 }
136
137
138
139
140
141
142 public void setType( String type )
143 {
144 this.type = type;
145 }
146
147 }