/*
* Copyright 2001-2008 Geert Bevin (gbevin[remove] at uwyn dot com)
* Licensed under the Apache License, Version 2.0 (the "License")
* $Id: PurgingRememberManager.java 3918 2008-04-14 17:35:35Z gbevin $
*/
package com.uwyn.rife.authentication.remembermanagers;
import com.uwyn.rife.authentication.RememberManager;
import com.uwyn.rife.authentication.exceptions.RememberManagerException;
import com.uwyn.rife.config.RifeConfig;
import java.util.Random;
public class PurgingRememberManager implements RememberManager
{
private int mRememberPurgeFrequency = RifeConfig.Authentication.getRememberPurgeFrequency();
private int mRememberPurgeScale = RifeConfig.Authentication.getRememberPurgeScale();
private final Random mRandom = new Random();
private RememberManager mRememberManager = null;
public PurgingRememberManager(RememberManager rememberManager)
{
if (null == rememberManager) throw new IllegalArgumentException("rememberManager can't be null");
mRememberManager = rememberManager;
}
public RememberManager getRememberManager()
{
return mRememberManager;
}
public int getRememberPurgeFrequency()
{
return mRememberPurgeFrequency;
}
public void setRememberPurgeFrequency(int frequency)
{
mRememberPurgeFrequency = frequency;
}
public int getRememberPurgeScale()
{
return mRememberPurgeScale;
}
public void setRememberPurgeScale(int scale)
{
mRememberPurgeScale = scale;
}
public long getRememberDuration()
{
return mRememberManager.getRememberDuration();
}
public void setRememberDuration(long milliseconds)
{
mRememberManager.setRememberDuration(milliseconds);
}
public String createRememberId(long userId, String hostIp)
throws RememberManagerException
{
int purge_decision = -1;
synchronized (mRandom)
{
purge_decision = mRandom.nextInt(mRememberPurgeScale);
}
if (purge_decision <= mRememberPurgeFrequency)
{
purgeRememberIds();
}
return mRememberManager.createRememberId(userId, hostIp);
}
public boolean eraseRememberId(String rememberId)
throws RememberManagerException
{
return mRememberManager.eraseRememberId(rememberId);
}
public boolean eraseUserRememberIds(long userId)
throws RememberManagerException
{
return mRememberManager.eraseUserRememberIds(userId);
}
public void eraseAllRememberIds()
throws RememberManagerException
{
mRememberManager.eraseAllRememberIds();
}
public long getRememberedUserId(String rememberId)
throws RememberManagerException
{
return mRememberManager.getRememberedUserId(rememberId);
}
public void purgeRememberIds()
throws RememberManagerException
{
mRememberManager.purgeRememberIds();
}
}