| | |
| | | */
|
| | | package com.gitblit.utils;
|
| | |
|
| | | import java.io.ByteArrayOutputStream;
|
| | | import java.io.UnsupportedEncodingException;
|
| | | import java.nio.ByteBuffer;
|
| | | import java.nio.CharBuffer;
|
| | |
| | | * @return the first invalid character found or null if string is acceptable
|
| | | */
|
| | | public static Character findInvalidCharacter(String name) {
|
| | | char[] validChars = { '/', '.', '_', '-' };
|
| | | char[] validChars = { '/', '.', '_', '-', '~' };
|
| | | for (char c : name.toCharArray()) {
|
| | | if (!Character.isLetterOrDigit(c)) {
|
| | | boolean ok = false;
|
| | |
| | | }
|
| | | return url;
|
| | | }
|
| | | |
| | | /**
|
| | | * Converts a string with \nnn sequences into a UTF-8 encoded string.
|
| | | * @param input
|
| | | * @return
|
| | | */
|
| | | public static String convertOctal(String input) {
|
| | | try {
|
| | | ByteArrayOutputStream bytes = new ByteArrayOutputStream();
|
| | | Pattern p = Pattern.compile("(\\\\\\d{3})");
|
| | | Matcher m = p.matcher(input);
|
| | | int i = 0;
|
| | | while (m.find()) {
|
| | | bytes.write(input.substring(i, m.start()).getBytes("UTF-8"));
|
| | | // replace octal encoded value
|
| | | // strip leading \ character
|
| | | String oct = m.group().substring(1);
|
| | | bytes.write(Integer.parseInt(oct, 8));
|
| | | i = m.end(); |
| | | }
|
| | | if (bytes.size() == 0) {
|
| | | // no octal matches
|
| | | return input;
|
| | | } else {
|
| | | if (i < input.length()) {
|
| | | // add remainder of string
|
| | | bytes.write(input.substring(i).getBytes("UTF-8"));
|
| | | }
|
| | | }
|
| | | return bytes.toString("UTF-8");
|
| | | } catch (Exception e) {
|
| | | e.printStackTrace();
|
| | | }
|
| | | return input;
|
| | | }
|
| | | |
| | | /**
|
| | | * Returns the first path element of a path string. If no path separator is
|
| | | * found in the path, an empty string is returned. |
| | | * |
| | | * @param path
|
| | | * @return the first element in the path
|
| | | */
|
| | | public static String getFirstPathElement(String path) {
|
| | | if (path.indexOf('/') > -1) {
|
| | | return path.substring(0, path.indexOf('/')).trim();
|
| | | }
|
| | | return "";
|
| | | }
|
| | | |
| | | /**
|
| | | * Returns the last path element of a path string
|
| | | * |
| | | * @param path
|
| | | * @return the last element in the path
|
| | | */
|
| | | public static String getLastPathElement(String path) {
|
| | | if (path.indexOf('/') > -1) {
|
| | | return path.substring(path.lastIndexOf('/') + 1);
|
| | | }
|
| | | return path;
|
| | | }
|
| | | } |