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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=====================================
21 package org.onap.dcaegen2.services.sdk.security;
23 import java.io.BufferedReader;
24 import java.io.IOException;
25 import java.io.InputStreamReader;
26 import java.nio.CharBuffer;
28 class CharsFromStreamReader {
30 public static final int END_OF_STREAM = -1;
31 private final int maxLength;
33 CharsFromStreamReader(int maxLength) {
34 this.maxLength = maxLength;
37 CharSequence readPasswordFromStdIn() throws IOException {
38 try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in))) {
39 return readPassword(bufferedReader);
43 CharSequence readPassword(BufferedReader bufferedReader) throws IOException {
44 final CharBuffer charBuffer = CharBuffer.allocate(maxLength);
45 if (readAllChars(charBuffer, bufferedReader)) {
47 return charBuffer.asReadOnlyBuffer();
49 throw new IOException(
50 "Input exceeds maximum supported length of " + maxLength + " characters");
54 private boolean readAllChars(CharBuffer charBuffer, BufferedReader bufferedReader) throws IOException {
56 while (readChars != END_OF_STREAM && charBuffer.remaining() > 0) {
57 readChars = bufferedReader.read(charBuffer);
59 // true when all characters were read
60 return readChars == -1;