#include <time.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctime>

#include "SHSSDK.h"

// 사용방법 표시
void PrintUsage(const char* prg)
{
	fprintf( stderr, "\n" );
	fprintf( stderr, "Usage: %s [id] [passwd] [service] [auth key] [cert file] [expire time]\n", prg );
	fprintf( stderr, "Inputs:                                              \n" );
	fprintf( stderr, "  id         :       ID      \n" );
	fprintf( stderr, "  passwd     :       Password\n" );
	fprintf( stderr, "  service    :       Service Name     \n" );
	fprintf( stderr, "  auth key   :       Service authentication key      \n" );
	fprintf( stderr, "  cert file  :       authentication file(full path)   \n" );
	fprintf( stderr, "  expire time:       auth token expiration time(sec)  \n" );
	fprintf( stderr, "\n" );
	fprintf( stderr, "   ex) %s test pass test1 authkey /user/service/cert/test123.cert 3600", prg );
	fprintf( stderr, "\n" );
	fprintf( stderr, "\n" );
	fprintf( stderr, " %s is Solbox Cloud Storage auth token tool.\n", prg );
	fprintf( stderr, "\n" );
	fprintf( stderr, "[Note] This program doesn't check for the input argument.\n");
	fprintf( stderr, "\n" );
	
	return;
}

int main(int argc, char * argv[])
{

	if( argc != 7 )	{
		PrintUsage(argv[0]);
		return 1;
	}

	///////////////////////// SSDK ////////////////////////////////////////////////////////////////////
	// !!! 중요 !!!
	// SSDK 가 End User에게 배포가되면 안됩니다.
	// 그 이유는 보안상 취약점이 발생 하기때문입니다.
	// 해당 소스는 샘플용일 뿐이며, SSDK는 인증서버를 마련하여 해당 서버에서 
	// 생성해 전달 될 수 있도록 제작되어야 합니다.

	char *__auth_string = NULL;
	time_t expire = time(0)+atoll(argv[6]);
	/* SSDK : get auth string */
	__auth_string = (char *)sh_get_auth_string(argv[1], argv[2], argv[3], argv[4], argv[5], expire);
	if (!__auth_string) {
		fprintf(stderr, "Cannot get the auth string.\n");
		return 1;
	}

	tm * ptm = localtime(&expire);
	char buffer[64] = {0};

	strftime(buffer, 64, "%F %T", ptm);
	fprintf(stdout, "\n");  
	fprintf(stdout, "* auth token  : \n");
	fprintf(stdout, "%s\n\n",__auth_string);
	fprintf(stdout, "* expire date : \n");
	fprintf(stdout, "%s \n",buffer);
	fprintf(stdout, "\n"); 
	if(__auth_string)
		sh_mem_free(__auth_string);
	///////////////////////// SSDK ////////////////////////////////////////////////////////////////////
	return 0;
}


