1 /*-
2 * #%L
3 * io.earcam.utilitarian.security
4 * %%
5 * Copyright (C) 2017 earcam
6 * %%
7 * SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
8 *
9 * You <b>must</b> choose to accept, in full - any individual or combination of
10 * the following licenses:
11 * <ul>
12 * <li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
13 * <li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
14 * <li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
15 * <li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
16 * </ul>
17 * #L%
18 */
19 package io.earcam.utilitarian.security;
20
21 import java.util.Arrays;
22 import java.util.Objects;
23
24 import javax.security.auth.Destroyable;
25
26 /**
27 * Implements {@link AutoCloseable} to provoke compiler warnings, where the
28 * implementation of {@link #close()} calls {@link #destroy()}
29 *
30 */
31 public class Credential implements Destroyable, AutoCloseable {
32
33 private String name;
34 private char[] password;
35
36
37 public Credential(String name, char[] password)
38 {
39 Objects.requireNonNull(name, "name");
40 this.name = name;
41 this.password = password;
42 }
43
44
45 @Override
46 public void destroy()
47 {
48 name = null;
49 Arrays.fill(password, ' ');
50 password = null;
51 }
52
53
54 @Override
55 public boolean isDestroyed()
56 {
57 return name == null;
58 }
59
60
61 public String name()
62 {
63 return name;
64 }
65
66
67 public char[] password()
68 {
69 return password;
70 }
71
72
73 @Override
74 public void close()
75 {
76 destroy();
77 }
78 }