001/** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.activemq.transport.amqp.sasl; 018 019import org.apache.qpid.proton.engine.Sasl; 020import org.fusesource.hawtbuf.Buffer; 021 022/** 023 * Implements the SASL Plain mechanism. 024 */ 025public class PlainMechanism extends AbstractSaslMechanism { 026 027 @Override 028 public void processSaslStep(Sasl sasl) { 029 byte[] data = new byte[sasl.pending()]; 030 sasl.recv(data, 0, data.length); 031 032 Buffer[] parts = new Buffer(data).split((byte) 0); 033 switch (parts.length) { 034 case 0: 035 // Treat this as anonymous connect to support legacy behavior 036 // which allowed this. Connection will fail if broker is not 037 // configured to allow anonymous connections. 038 break; 039 case 2: 040 username = parts[0].utf8().toString(); 041 password = parts[1].utf8().toString(); 042 break; 043 case 3: 044 username = parts[1].utf8().toString(); 045 password = parts[2].utf8().toString(); 046 break; 047 default: 048 setFailed("Invalid encoding of Authentication credentials"); 049 break; 050 } 051 } 052 053 @Override 054 public String getMechanismName() { 055 return "PLAIN"; 056 } 057}