Search in sources :

Example 1 with ObjectInputStreamEx

use of hudson.remoting.ObjectInputStreamEx in project hudson-2.x by hudson.

the class AnnotatedLargeText method createAnnotator.

private ConsoleAnnotator createAnnotator(StaplerRequest req) throws IOException {
    try {
        String base64 = req != null ? req.getHeader("X-ConsoleAnnotator") : null;
        if (base64 != null) {
            Cipher sym = Secret.getCipher("AES");
            sym.init(Cipher.DECRYPT_MODE, Hudson.getInstance().getSecretKeyAsAES128());
            ObjectInputStream ois = new ObjectInputStreamEx(new GZIPInputStream(new CipherInputStream(new ByteArrayInputStream(Base64.decode(base64.toCharArray())), sym)), Hudson.getInstance().pluginManager.uberClassLoader);
            long timestamp = ois.readLong();
            if (TimeUnit2.HOURS.toMillis(1) > abs(System.currentTimeMillis() - timestamp))
                // don't deserialize something too old to prevent a replay attack
                return (ConsoleAnnotator) ois.readObject();
        }
    } catch (GeneralSecurityException e) {
        throw new IOException2(e);
    } catch (ClassNotFoundException e) {
        throw new IOException2(e);
    }
    // start from scratch
    return ConsoleAnnotator.initial(context == null ? null : context.getClass());
}
Also used : GZIPInputStream(java.util.zip.GZIPInputStream) CipherInputStream(javax.crypto.CipherInputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) GeneralSecurityException(java.security.GeneralSecurityException) Cipher(javax.crypto.Cipher) ObjectInputStreamEx(hudson.remoting.ObjectInputStreamEx) IOException2(hudson.util.IOException2) ObjectInputStream(java.io.ObjectInputStream)

Example 2 with ObjectInputStreamEx

use of hudson.remoting.ObjectInputStreamEx in project hudson-2.x by hudson.

the class ConsoleNote method readFrom.

/**
 * Reads a note back from {@linkplain #encodeTo(OutputStream) its encoded form}.
 *
 * @param in
 *      Must point to the beginning of a preamble.
 *
 * @return null if the encoded form is malformed.
 */
public static ConsoleNote readFrom(DataInputStream in) throws IOException, ClassNotFoundException {
    try {
        byte[] preamble = new byte[PREAMBLE.length];
        in.readFully(preamble);
        if (!Arrays.equals(preamble, PREAMBLE))
            // not a valid preamble
            return null;
        DataInputStream decoded = new DataInputStream(new UnbufferedBase64InputStream(in));
        int sz = decoded.readInt();
        // Size should be greater than Zero. See http://issues.hudson-ci.org/browse/HUDSON-6558
        if (sz < 0) {
            return null;
        }
        byte[] buf = new byte[sz];
        decoded.readFully(buf);
        byte[] postamble = new byte[POSTAMBLE.length];
        in.readFully(postamble);
        if (!Arrays.equals(postamble, POSTAMBLE))
            // not a valid postamble
            return null;
        ObjectInputStream ois = new ObjectInputStreamEx(new GZIPInputStream(new ByteArrayInputStream(buf)), Hudson.getInstance().pluginManager.uberClassLoader);
        return (ConsoleNote) ois.readObject();
    } catch (Error e) {
        // package that up as IOException so that the caller won't fatally die.
        throw new IOException2(e);
    }
}
Also used : GZIPInputStream(java.util.zip.GZIPInputStream) UnbufferedBase64InputStream(hudson.util.UnbufferedBase64InputStream) ByteArrayInputStream(java.io.ByteArrayInputStream) ObjectInputStreamEx(hudson.remoting.ObjectInputStreamEx) DataInputStream(java.io.DataInputStream) IOException2(hudson.util.IOException2) ObjectInputStream(java.io.ObjectInputStream)

Aggregations

ObjectInputStreamEx (hudson.remoting.ObjectInputStreamEx)2 IOException2 (hudson.util.IOException2)2 ByteArrayInputStream (java.io.ByteArrayInputStream)2 ObjectInputStream (java.io.ObjectInputStream)2 GZIPInputStream (java.util.zip.GZIPInputStream)2 UnbufferedBase64InputStream (hudson.util.UnbufferedBase64InputStream)1 DataInputStream (java.io.DataInputStream)1 GeneralSecurityException (java.security.GeneralSecurityException)1 Cipher (javax.crypto.Cipher)1 CipherInputStream (javax.crypto.CipherInputStream)1