int IDriveLoadDir(TFileStore *FS, char *InPattern, ListNode *Items, int Flags) { int result; char *Tempstr=NULL, *XML=NULL; char *TagName=NULL, *TagData=NULL, *ptr; TFileInfo *FI; HTTPInfoStruct *Info; ListNode *Vars; Tempstr=MCopyStr(Tempstr,"https://",FS->Host,"/evs/browseFolder?uid=",FS->Logon,"&pwd=",FS->Passwd,"&p=",FS->CurrDir,NULL); FS->S=HTTPMethod("POST",Tempstr,"","","","",0); Tempstr=STREAMReadDocument(Tempstr, FS->S, TRUE); ptr=XMLGetTag(Tempstr,NULL,&TagName,&TagData); while (ptr) { if (strcmp(TagName,"item")==0) { FI=IDriveReadFileEntry(TagData); if (Items) ListAddNamedItem(Items,FI->Name,FI); } ptr=XMLGetTag(ptr,NULL,&TagName,&TagData); } STREAMClose(FS->S); FS->S=NULL; Tempstr=MCopyStr(Tempstr,"https://",FS->Host,"/evs/getAccountQuota?uid=",FS->Logon,"&pwd=",FS->Passwd,NULL); FS->S=HTTPMethod("POST",Tempstr,"","","","",0); Tempstr=STREAMReadDocument(Tempstr, FS->S, TRUE); Vars=ListCreate(); IDriveParseResponse(Tempstr,Vars); FS->BytesAvailable=strtod(GetVar(Vars,"totalquota"),NULL); FS->BytesUsed=strtod(GetVar(Vars,"usedquota"),NULL); ListDestroy(Vars,DestroyString); DestroyString(TagName); DestroyString(TagData); DestroyString(Tempstr); DestroyString(XML); return(TRUE); }
void OAuthDeviceGetAccessToken(char *TokenURL, char *ClientID, char *ClientSecret, char *DeviceCode, char **AccessToken, char **RefreshToken) { char *Tempstr=NULL, *Encode=NULL; ListNode *Vars=NULL; STREAM *S; Vars=ListCreate(); Encode=HTTPQuote(Encode,ClientID); Tempstr=MCopyStr(Tempstr,TokenURL,"?client_id=",Encode,NULL); Encode=HTTPQuote(Encode,ClientSecret); Tempstr=MCatStr(Tempstr,"&client_secret=",Encode,NULL); Tempstr=MCatStr(Tempstr,"&code=",DeviceCode,NULL); Tempstr=MCatStr(Tempstr,"&grant_type=","http://oauth.net/grant_type/device/1.0",NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); if (S) { Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { StripTrailingWhitespace(Tempstr); printf("OA: %s\n",Tempstr); OAuthParseJSON(Tempstr, Vars); Tempstr=STREAMReadLine(Tempstr,S); } } *AccessToken=CopyStr(*AccessToken,GetVar(Vars,"access_token")); *RefreshToken=CopyStr(*RefreshToken,GetVar(Vars,"refresh_token")); ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(Encode); }
char *OAuthGetAccessToken(char *RetStr, const char *URL, const char *Key, const char *RequestToken) { STREAM *S; char *Tempstr=NULL, *Name=NULL, *Value=NULL, *ptr; int len; Tempstr=MCopyStr(Tempstr,"consumer_key=",Key,"&code=",RequestToken,NULL); S=HTTPMethod("POST",URL,"","","application/x-www-form-urlencoded; charset=UTF-8",Tempstr,StrLen(Tempstr)); if (S) { STREAMReadToString(S, &Tempstr, &len, NULL); ptr=GetNameValuePair(Tempstr,"&","=",&Name,&Value); while (ptr) { if (strcmp(Name,"access_token")==0) RetStr=CopyStr(RetStr,Value); ptr=GetNameValuePair(ptr,"&","=",&Name,&Value); } STREAMClose(S); } DestroyString(Name); DestroyString(Value); DestroyString(Tempstr); return(RetStr); }
void OAuthDeviceRefreshToken(char *TokenURL, char *ClientID, char *ClientSecret, char *RequestRefreshToken, char **AccessToken, char **RefreshToken) { char *Tempstr=NULL, *Encode=NULL; ListNode *Vars=NULL; STREAM *S; Vars=ListCreate(); Tempstr=MCopyStr(Tempstr,TokenURL,"?client_id=",ClientID,NULL); Tempstr=MCatStr(Tempstr,"&client_secret=",ClientSecret,NULL); Tempstr=MCatStr(Tempstr,"&refresh_token=",RequestRefreshToken,NULL); Tempstr=MCatStr(Tempstr,"&grant_type=","refresh_token",NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); if (S) { Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { StripTrailingWhitespace(Tempstr); OAuthParseJSON(Tempstr, Vars); Tempstr=STREAMReadLine(Tempstr,S); } } *AccessToken=CopyStr(*AccessToken,GetVar(Vars,"access_token")); *RefreshToken=CopyStr(*RefreshToken,GetVar(Vars,"refresh_token")); ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(Encode); }
void OAuthInstalledAppGetAccessToken(char *TokenURL, char *ClientID, char *ClientSecret, char *AuthCode, char *RedirectURL, char **AccessToken, char **RefreshToken) { char *Tempstr=NULL, *Encode=NULL; ListNode *Vars=NULL; STREAM *S; Vars=ListCreate(); Tempstr=MCopyStr(Tempstr,TokenURL,"?client_id=",ClientID,NULL); Tempstr=MCatStr(Tempstr,"&client_secret=",ClientSecret,NULL); Tempstr=MCatStr(Tempstr,"&code=",AuthCode,NULL); Tempstr=MCatStr(Tempstr,"&redirect_uri=",RedirectURL,NULL); Tempstr=MCatStr(Tempstr,"&grant_type=","authorization_code",NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); if (S) { Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { StripTrailingWhitespace(Tempstr); fprintf(stderr,"OA: %s\n",Tempstr); OAuthParseJSON(Tempstr, Vars); Tempstr=STREAMReadLine(Tempstr,S); } } *AccessToken=CopyStr(*AccessToken,GetVar(Vars,"access_token")); *RefreshToken=CopyStr(*RefreshToken,GetVar(Vars,"refresh_token")); ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(Encode); }
int IDriveRenameFile(TFileStore *FS, char *FromArg, char *ToArg) { char *Tempstr=NULL, *Error=NULL, *FromPath=NULL, *ToPath=NULL; HTTPInfoStruct *Info; ListNode *Headers; int result, val; STREAM *S; FromPath=MakeFullPath(FromPath,FS, FromArg); ToPath=MakeFullPath(ToPath,FS, ToArg); Tempstr=MCopyStr(Tempstr,"https://",FS->Host,"/evs/renameFileFolder?uid=",FS->Logon,"&pwd=",FS->Passwd,"&oldpath=",FromPath,"&newpath=",ToPath,NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); val=HTTPReadDocument(S, &Tempstr); if (Settings.Flags & FLAG_VERBOSE) printf("\n%s\n",Tempstr); Error=CopyStr(Error,""); result=IDriveParseStatusResponse(Tempstr, &Error); DestroyString(Tempstr); DestroyString(Error); DestroyString(FromPath); DestroyString(ToPath); return(result); }
int DisplayAvailableFormats(ListNode *Vars, char *Formats, int ShowSize) { char *URL=NULL, *Token=NULL, *TokenID=NULL, *Tempstr=NULL, *ptr; STREAM *S; int result=TRUE; fprintf(stderr, "\nFormats available for this Movie: "); ptr=GetToken(Formats," ",&Token,0); while (ptr) { if (StrLen(Token)) TokenID=MCopyStr(TokenID,"item:",Token,NULL); URL=CopyStr(URL,GetVar(Vars,TokenID)); if (strcmp(Token,"reference") !=0) { fprintf(stderr,"%s",Token); if (ShowSize) { S=HTTPMethod("HEAD",URL,NULL,NULL); if (S) { Tempstr=CopyStr(Tempstr,STREAMGetValue(S,"HTTP:ResponseCode")); if (strcmp(Tempstr,"403") ==0) { printf("\nERROR: %s response for %s\n",Tempstr,URL); result=FALSE; break; } else if (strcmp(Tempstr,"200")==0) { Tempstr=CopyStr(Tempstr,STREAMGetValue(S,"HTTP:Content-length")); fprintf(stderr, " (%s)",GetHumanReadableDataQty(strtod(Tempstr,NULL),FALSE)); STREAMClose(S); } } } } fprintf(stderr,", "); ptr=GetToken(ptr," ",&Token,0); } fprintf(stderr,"\n\n",Tempstr); DestroyString(Token); DestroyString(TokenID); DestroyString(Tempstr); DestroyString(URL); return(result); }
STREAM *IDriveOpenFile(TFileStore *FS, TFileInfo *FI, int Flags) { char *URL=NULL, *Tempstr=NULL, *Boundary=NULL, *FullPath=NULL, *ptr; HTTPInfoStruct *Info; TFileInfo *tmpFI; if (Flags & OPEN_WRITE) { URL=MCopyStr(URL,"https://",FS->Host,"/evs/uploadFile",NULL); Info=HTTPInfoFromURL("POST",URL); Boundary=FormatStr(Boundary,"%x-%x-%x",getpid(),time(NULL),rand()); Info->PostContentType=MCopyStr(Info->ContentType,"multipart/form-data; boundary=",Boundary,NULL); Tempstr=MCopyStr(Tempstr,"--",Boundary,"\r\n","Content-disposition: form-data; name=uid\r\n\r\n",FS->Logon,"\r\n",NULL); Tempstr=MCatStr(Tempstr,"--",Boundary,"\r\n","Content-disposition: form-data; name=pwd\r\n\r\n",FS->Passwd,"\r\n",NULL); Tempstr=MCatStr(Tempstr,"--",Boundary,"\r\n","Content-disposition: form-data; name=p\r\n\r\n",FS->CurrDir,"\r\n",NULL); //Tempstr=MCatStr(Tempstr,"--",Boundary,"\r\n","Content-disposition: form-data; name=myfiles\r\n\r\n",Path,"\r\n",NULL); Tempstr=MCatStr(Tempstr,"--",Boundary,"\r\n","Content-disposition: form-data; charset=UTF-8; name=definition; filename=",FI->Path,"\r\nContent-type: image/jpeg\r\n\r\n",NULL); Info->PostContentLength=FI->Size+StrLen(Tempstr)+StrLen(Boundary)+8; FS->S=HTTPTransact(Info); FS->Extra=Info; STREAMWriteLine(Tempstr,FS->S); STREAMSetValue(FS->S,"Boundary",Boundary); Tempstr=FormatStr(Tempstr,"%d",FI->Size); STREAMSetValue(FS->S,"Transfer-Size",Tempstr); } else { if (*FI->Path=='/') FullPath=CopyStr(FullPath,FI->Path); else FullPath=MCopyStr(FullPath,FS->CurrDir,FI->Path,NULL); Tempstr=HTTPQuote(Tempstr,FullPath); // if (OpenFI->Version) FI=OpenFI; // else FI=FileStoreGetFileInfo(FS, FI->Path); URL=FormatStr(URL,"https://%s/evs/downloadFile?uid=%s&pwd=%s&p=%s&version=%d",FS->Host,FS->Logon,FS->Passwd,Tempstr,FI->Version); FS->S=HTTPMethod("POST",URL,"","","","",0); FS->Extra=NULL; // if (FI != OpenFI) FileInfoDestroy(FI); } DestroyString(URL); DestroyString(FullPath); DestroyString(Tempstr); DestroyString(Boundary); return(FS->S); }
int IDriveOpen(TFileStore *FS) { char *Tempstr=NULL, *TagName=NULL, *TagData=NULL, *ptr; ListNode *Vars; STREAM *S; int result=FALSE; if (! FS) { return(FALSE); } //Always require login for IDrive if (! StrLen(FS->Passwd)) RequestAuthDetails(&FS->Logon,&FS->Passwd); time(&StartTime); HTTPSetFlags(HTTP_NODECODE); //Get Address of the server that stores my data FS->CurrDir=CopyStr(FS->CurrDir,"/"); if (StrLen(FS->InitDir)) FS->ChDir(FS,FS->InitDir); Tempstr=MCopyStr(Tempstr,"https://evs.idrive.com/evs/getServerAddress?uid=",FS->Logon,"&pwd=",FS->Passwd,NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); if (S) { Tempstr=STREAMReadDocument(Tempstr, S, TRUE); Vars=ListCreate(); IDriveParseResponse(Tempstr, Vars); FS->Host=CopyStr(FS->Host,GetVar(Vars,"webApiServer")); PrintConnectionDetails(FS,S); STREAMClose(S); result=TRUE; } ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(TagData); DestroyString(TagName); return(result); }
int IDriveMkDir(TFileStore *FS, char *Dir) { char *Tempstr=NULL; int result=TRUE, val; Tempstr=MCopyStr(Tempstr,"https://",FS->Host,"/evs/createFolder?uid=",FS->Logon,"&pwd=",FS->Passwd,"&p=",FS->CurrDir,"&foldername=",Dir,NULL); FS->S=HTTPMethod("POST",Tempstr,"","","","",0); val=HTTPReadDocument(FS->S, &Tempstr); if (Settings.Flags & FLAG_VERBOSE) printf("\n%s\n",Tempstr); STREAMClose(FS->S); FS->S=NULL; DestroyString(Tempstr); return(result); }
char *OAuthGetRequestToken(char *RetStr, const char *URL, const char *Key, const char *RedirectURL) { STREAM *S; char *Tempstr=NULL; int len; Tempstr=MCopyStr(Tempstr,"consumer_key=",Key,"&redirect_uri=",RedirectURL,NULL); S=HTTPMethod("POST",URL,"","","application/x-www-form-urlencoded; charset=UTF-8",Tempstr,StrLen(Tempstr)); if (S) { STREAMReadToString(S, &Tempstr, &len, NULL); if (strncmp(Tempstr,"code=",5)==0) RetStr=CopyStr(RetStr,Tempstr+5); STREAMClose(S); } DestroyString(Tempstr); return(RetStr); }
//curl -X POST -d "client_id=CLIENT_ID_HERE&client_secret=CLIENT_SECRET_HERE&grant_type=password&username=YOUR_EMAIL&password=YOUR_PASSWORD" -Ss https://mastodon.social/oauth/token int OAuthGrant(OAUTH *Ctx, const char *URL, const char *PostArgs) { STREAM *S; char *Tempstr=NULL; int len, result=FALSE; Tempstr=MCopyStr(Tempstr,URL,"?",PostArgs,NULL); S=HTTPMethod("POST",URL,"application/x-www-form-urlencoded; charset=UTF-8",PostArgs,StrLen(PostArgs)); if (S) { sleep(1); Tempstr=STREAMReadDocument(Tempstr, S); result=OAuthParseReply(Ctx, STREAMGetValue(S, "HTTP:Content-Type"), Tempstr); STREAMClose(S); } DestroyString(Tempstr); return(result); }
void OAuthDeviceLogin(char *LoginURL, char *ClientID, char *Scope, char **DeviceCode, char **UserCode, char **NextURL) { char *Tempstr=NULL, *Encode=NULL; ListNode *Vars=NULL; STREAM *S; Vars=ListCreate(); Encode=HTTPQuote(Encode,ClientID); Tempstr=MCopyStr(Tempstr,LoginURL,"?client_id=",Encode,NULL); Encode=HTTPQuote(Encode,Scope); Tempstr=MCatStr(Tempstr,"&scope=",Encode,NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); if (S) { Encode=CopyStr(Encode,""); Tempstr=STREAMReadLine(Tempstr,S); while (Tempstr) { StripTrailingWhitespace(Tempstr); Encode=CatStr(Encode,Tempstr); Tempstr=STREAMReadLine(Tempstr,S); } OAuthParseJSON(Encode, Vars); *NextURL=CopyStr(*NextURL,GetVar(Vars,"verification_url")); *DeviceCode=CopyStr(*DeviceCode,GetVar(Vars,"device_code")); *UserCode=CopyStr(*UserCode,GetVar(Vars,"user_code")); } ListDestroy(Vars,DestroyString); DestroyString(Tempstr); DestroyString(Encode); STREAMClose(S); }
int IDriveDeleteFile(TFileStore *FS, TFileInfo *FI) { char *Tempstr=NULL, *Error=NULL, *Path=NULL; HTTPInfoStruct *Info; ListNode *Headers; int result, val; STREAM *S; Path=MakeFullPath(Path,FS, FI->Name); Tempstr=MCopyStr(Tempstr,"https://",FS->Host,"/evs/deleteFile?uid=",FS->Logon,"&pwd=",FS->Passwd,"&p=",Path,NULL); S=HTTPMethod("POST",Tempstr,"","","","",0); val=HTTPReadDocument(S, &Tempstr); if (Settings.Flags & FLAG_VERBOSE) printf("\n%s\n",Tempstr); result=IDriveParseStatusResponse(Tempstr, &Error); DestroyString(Tempstr); DestroyString(Error); DestroyString(Path); return(result); }
FOR_EACH_ENUMERATE(index, cur, kMethodStrings) { if (caseInsensitiveEqual(*cur, method)) { return HTTPMethod(index); } }
STREAM *HTTPPost(char *URL, char *Logon, char *Password, char *ContentType, char *Content) { return(HTTPMethod("POST", URL, Logon, Password, ContentType, Content, StrLen(Content))); }
STREAM *HTTPGet(char *URL, char *Logon, char *Password) { return(HTTPMethod("GET", URL, Logon, Password)); }