/* * See LICENSE for licensing and NOTICE for copyright. */ package net.shibboleth.idp.cas.session; import java.io.IOException; import javax.annotation.Nonnull; import javax.json.JsonObject; import javax.json.stream.JsonGenerator; import net.shibboleth.idp.session.AbstractSPSessionSerializer; import net.shibboleth.idp.session.SPSession; import net.shibboleth.utilities.java.support.annotation.Duration; import net.shibboleth.utilities.java.support.annotation.constraint.NonNegative; import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty; /** * JSON serializer for {@link CASSPSession} class. * * @author Marvin S. Addison */ public class CASSPSessionSerializer extends AbstractSPSessionSerializer { /** Field name of CAS ticket. */ @Nonnull @NotEmpty private static final String TICKET_FIELD = "st"; /** * Constructor. * * @param offset milliseconds to subtract from record expiration to establish session expiration value */ public CASSPSessionSerializer(@Duration @NonNegative long offset) { super(offset); } @Override protected void doSerializeAdditional(@Nonnull final SPSession instance, @Nonnull final JsonGenerator generator) { if (!(instance instanceof CASSPSession)) { throw new IllegalArgumentException("Expected instance of CASSPSession but got " + instance); } generator.write(TICKET_FIELD, ((CASSPSession) instance).getTicketId()); } @Nonnull @Override protected SPSession doDeserialize( @Nonnull final JsonObject obj, @Nonnull @NotEmpty final String id, final long creation, final long expiration) throws IOException { return new CASSPSession(id, creation, expiration, obj.getString(TICKET_FIELD)); } }