Activate JUnits in project
[dcaegen2/services/sdk.git] / security / crypt-password / src / main / java / org / onap / dcaegen2 / services / sdk / security / CharsFromStreamReader.java
1 /*
2  * ============LICENSE_START====================================
3  * DCAEGEN2-SERVICES-SDK
4  * =========================================================
5  * Copyright (C) 2019 Nokia. All rights reserved.
6  * =========================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *       http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=====================================
19  */
20
21 package org.onap.dcaegen2.services.sdk.security;
22
23 import java.io.BufferedReader;
24 import java.io.IOException;
25 import java.io.InputStreamReader;
26 import java.nio.CharBuffer;
27
28 class CharsFromStreamReader {
29
30     public static final int END_OF_STREAM = -1;
31     private final int maxLength;
32
33     CharsFromStreamReader(int maxLength) {
34         this.maxLength = maxLength;
35     }
36
37     CharSequence readPasswordFromStdIn() throws IOException {
38         try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))) {
39             return readPassword(bufferedReader);
40         }
41     }
42
43     CharSequence readPassword(BufferedReader bufferedReader) throws IOException {
44         final CharBuffer charBuffer = CharBuffer.allocate(maxLength);
45         if (readAllChars(charBuffer, bufferedReader)) {
46             charBuffer.flip();
47             return charBuffer.asReadOnlyBuffer();
48         } else {
49             throw new IOException(
50                     "Input exceeds maximum supported length of " + maxLength + " characters");
51         }
52     }
53
54     private boolean readAllChars(CharBuffer charBuffer, BufferedReader bufferedReader) throws IOException {
55         int readChars = 0;
56         while (readChars != END_OF_STREAM && charBuffer.remaining() > 0) {
57             readChars = bufferedReader.read(charBuffer);
58         }
59         // true when all characters were read
60         return readChars == -1;
61     }
62 }