001package org.kepler.webview.server.auth;
002
003import java.nio.charset.StandardCharsets;
004
005import io.vertx.core.AsyncResult;
006import io.vertx.core.Future;
007import io.vertx.core.Handler;
008import io.vertx.core.buffer.Buffer;
009import io.vertx.core.json.JsonObject;
010import io.vertx.ext.auth.AbstractUser;
011import io.vertx.ext.auth.AuthProvider;
012
013public class NoneUser extends AbstractUser {
014
015    public NoneUser() {}
016
017    public NoneUser(String username, String group) {
018        _group = group;
019        _username = username;
020    }
021
022    @Override
023    public JsonObject principal() {
024        return new JsonObject().put("username", _username)
025            .put("fullname", _username)
026            .put("groups", _group);
027    }
028
029    /** Do nothing. */
030    @Override
031    public void setAuthProvider(AuthProvider arg0) {
032    }
033
034    @Override
035    protected void doIsPermitted(String authority,
036            Handler<AsyncResult<Boolean>> permittedHandler) {
037        // Everything is authorized.
038        permittedHandler.handle(Future.succeededFuture(Boolean.TRUE));
039    }
040
041    @Override
042    public int readFromBuffer(int pos, Buffer buffer) {
043        pos = super.readFromBuffer(pos, buffer);
044        
045        int groupLength = buffer.getInt(pos);
046        pos += 4;
047        byte[] groupBytes = buffer.getBytes(pos, pos + groupLength);
048        pos += groupLength;
049        _group = new String(groupBytes, StandardCharsets.UTF_8);
050
051        int usernameLength = buffer.getInt(pos);
052        pos += 4;
053        byte[] usernameBytes = buffer.getBytes(pos, pos + usernameLength);
054        pos += usernameLength;
055        _username = new String(usernameBytes, StandardCharsets.UTF_8);
056
057        return pos;
058    }
059    
060    @Override
061    public void writeToBuffer(Buffer buffer) {
062        super.writeToBuffer(buffer);
063        byte[] groupBytes = _group.getBytes(StandardCharsets.UTF_8);
064        buffer.appendInt(groupBytes.length).appendBytes(groupBytes);
065        byte[] userBytes = _username.getBytes(StandardCharsets.UTF_8);
066        buffer.appendInt(userBytes.length).appendBytes(userBytes);        
067    }
068    
069    private String _group;
070    private String _username;
071}