mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
155 lines
5.4 KiB
Java
155 lines
5.4 KiB
Java
/*******************************************************************************
|
|
* sdrtrunk
|
|
* Copyright (C) 2014-2016 Dennis Sheirer
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
*
|
|
******************************************************************************/
|
|
package external.radioreference;
|
|
|
|
import com.radioreference.api.soap2.AuthInfo;
|
|
import com.radioreference.api.soap2.RRWsdlLocator;
|
|
import com.radioreference.api.soap2.RRWsdlPortType;
|
|
import com.radioreference.api.soap2.UserFeedBroadcast;
|
|
import com.radioreference.api.soap2.UserInfo;
|
|
import org.apache.axis.AxisFault;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import javax.xml.rpc.ServiceException;
|
|
import java.rmi.RemoteException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
|
|
public class RadioReferenceService
|
|
{
|
|
private final static Logger mLog = LoggerFactory.getLogger( RadioReferenceService.class );
|
|
private final SimpleDateFormat SDF = new SimpleDateFormat("MM-dd-yyyy");
|
|
|
|
public static final String SDRTRUNK_APP_KEY = "88969092";
|
|
public static final String RADIO_REFERENCE_API_VERSION = "14";
|
|
public static final String SOAP_RPC_RESPONSE_STYLE = "rpc";
|
|
|
|
private RRWsdlLocator mService = new RRWsdlLocator();
|
|
private RRWsdlPortType mClient;
|
|
private Long mAccountExpiration;
|
|
|
|
private AuthInfo mUserAuthorization;
|
|
|
|
/**
|
|
* Creates a SOAP web service client for interaction with the radioreference.com server.
|
|
*
|
|
* @param username for a premium subscriber
|
|
* @param password for a premium subscriber
|
|
* @throws ServiceException if the client can't be created
|
|
* @throws IllegalArgumentException if either the username or password is null or empty
|
|
*/
|
|
public RadioReferenceService(String username, String password) throws ServiceException
|
|
{
|
|
mClient = mService.getRRWsdlPort();
|
|
|
|
setAuthorizationInformation(username, password);
|
|
}
|
|
|
|
/**
|
|
* Sets new premium subscriber user credentials to authenticate to the server.
|
|
* @param username for a premium subscriber on radioreference.com
|
|
* @param password for a premium subscriber
|
|
*/
|
|
public void setAuthorizationInformation(String username, String password) throws IllegalArgumentException
|
|
{
|
|
if(username == null || username.isEmpty() || password == null || password.isEmpty())
|
|
{
|
|
throw new IllegalArgumentException("Username [" + username + "] and/or password [" + password +
|
|
"] cannot be null or empty");
|
|
}
|
|
|
|
mUserAuthorization = new AuthInfo(username, password, SDRTRUNK_APP_KEY, RADIO_REFERENCE_API_VERSION,
|
|
SOAP_RPC_RESPONSE_STYLE);
|
|
}
|
|
|
|
/**
|
|
* Indicates if the service has a non-null user authorization
|
|
*/
|
|
public void checkCredentials() throws IllegalArgumentException
|
|
{
|
|
if(mUserAuthorization == null)
|
|
{
|
|
throw new IllegalStateException("Authorization information (username/password) required");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Account expiration date
|
|
*
|
|
* @return expiration date in millis since epoch
|
|
* @throws AxisFault for remote server errors
|
|
* @throws IllegalStateException for null or empty login credentials
|
|
* @throws RemoteException for web service client errors
|
|
*/
|
|
public long getAccountExpirationDate() throws IllegalStateException, RemoteException
|
|
{
|
|
checkCredentials();
|
|
|
|
if(mAccountExpiration == null)
|
|
{
|
|
UserInfo userInfo = mClient.getUserData(mUserAuthorization);
|
|
|
|
if(userInfo != null)
|
|
{
|
|
String expiration = userInfo.getSubExpireDate();
|
|
|
|
if(expiration != null)
|
|
{
|
|
try
|
|
{
|
|
mAccountExpiration = SDF.parse(expiration).getTime();
|
|
}
|
|
catch(Exception e)
|
|
{
|
|
mLog.error("Couldn't parse account expiration date from web service response: " + expiration, e);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return mAccountExpiration;
|
|
}
|
|
|
|
/**
|
|
* Indicates if the radio reference user account is active (ie not expired)
|
|
*
|
|
* @throws IllegalStateException for null or empty login credentials
|
|
* @throws RemoteException for web service client errors
|
|
*/
|
|
public boolean isAccountActive() throws IllegalStateException, RemoteException
|
|
{
|
|
Long expiration = getAccountExpirationDate();
|
|
|
|
if(expiration != null)
|
|
{
|
|
return System.currentTimeMillis() < expiration;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public UserFeedBroadcast[] getUserFeedBroadcasts() throws IllegalArgumentException, RemoteException
|
|
{
|
|
checkCredentials();
|
|
|
|
return mClient.getUserFeedBroadcasts(mUserAuthorization);
|
|
}
|
|
}
|