/*
 * Copyright (c) 2016 Manumitting Technologies Inc. and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Manumitting Technologies Inc - initial API and implementation
 */
package org.eclipse.userstorage.sdk.browser;

public class Constants {
  
  private static final String OAUTH_CLIENT_ID = "@uss.oauth.client.id@";
  private static final String OAUTH_CLIENT_SECRET = "@uss.oauth.client.secret@";

  public static String getOAuthClientId() {
    String clientId = System.getProperty("uss.oauth.client.id");
    if(clientId != null)
    {
      return clientId;
    }
    return OAUTH_CLIENT_ID;
  }

  public static String getOAuthClientSecret() {
    String clientSecret = System.getProperty("uss.oauth.client.secret");
    if (clientSecret != null)
    {
      return clientSecret;
    }
    return OAUTH_CLIENT_SECRET;
  }
}
