package com.mastfrog.acteur.util; import com.mastfrog.settings.Settings; import com.mastfrog.util.GUIDFactory; import javax.inject.Inject; import javax.inject.Provider; import javax.inject.Singleton; import org.joda.time.Duration; /** * Provides an authentication realm which changes every hour or whatever * interval is specified * * @author Tim Boudreau */ @Singleton public final class RotatingRealmProvider implements Provider<Realm> { public static final String SETTINGS_KEY_ROTATE_INTERVAL_MINUTES = "realm.rotate.interval.minutes"; public static final int DEFAULT_ROTATE_INTERVAL = 60; private final Duration interval; private final String salt; @Inject RotatingRealmProvider(Settings s, GUIDFactory randomStrings) { interval = Duration.standardMinutes(s.getInt(SETTINGS_KEY_ROTATE_INTERVAL_MINUTES, DEFAULT_ROTATE_INTERVAL)); salt = randomStrings.newGUID(1, 4); } @Override public Realm get() { Duration dur = new Duration(System.currentTimeMillis()); long minutesSince1970 = dur.toStandardMinutes().getMinutes(); return new Realm(Long.toString(minutesSince1970 / interval.getStandardMinutes(), 36) + salt); } }