ShareX and Chevereto

Rodolfo

Chevereto Developer
Chevereto Staff
Joined
Oct 7, 2008
Messages
16,531
Points
237
Location
Chevereto HQ
Website
rodolfoberrios.com
Hey guys, I've made a guide to use Chevereto with ShareX. With this tool you can upload directly from your desktop. You can upload images, screen captures, etc. You can even define a hotkey for this.

https://chevereto.com/docs/sharex

We will use this topic for questions and concerns about using Chevereto with ShareX.
 
Reactions: pctr_ and makaja2

anmolgill

Founder license
Beta tester
Joined
Jun 23, 2011
Messages
126
Points
70
Location
Australia
Website
celebphotos.site
i am trying to work with user api not working
http://shareimg.eu/myapi/1/upload/?key=315056&source=http://www.googleappsforedu.com/wp-content/uploads/2013/01/google_chrome.png&format=txt can u please check i have edited file as listed in docs

PHP:
<?php

/* --------------------------------------------------------------------

  Chevereto
  http://chevereto.com/

  @author    Rodolfo Berrios A. <http://rodolfoberrios.com/>
            <inbox@rodolfoberrios.com>

  Copyright (C) Rodolfo Berrios A. All rights reserved.
 
  BY USING THIS SOFTWARE YOU DECLARE TO ACCEPT THE CHEVERETO EULA
  http://chevereto.com/license

  --------------------------------------------------------------------- */

  /* API v1 : PLEASE NOTE
    
     This API v1 is currently just a bridge to port to Chevereto 3 the API from Chevereto 2.
     From now on Chevereto 2 API will be named API v1
    
     In future releases there will be an API v2 which will add methods like create user, create albums, etc.
    
  */
 
$route = function($handler) {
    try {
        $version = $handler->request[0];
        $action = $handler->request[1];
       
        if(is_null(CHV\getSetting('api_v1_key')) or CHV\getSetting('api_v1_key') == '') {
            throw new Exception("API v1 key can't be null. Go to your dashboard and set the API v1 key.", 0);
        }
       
        if(!G\timing_safe_compare('315056', $_REQUEST['key'])) {
            throw new Exception("Invalid API v1 key.", 100);
        }
       
        if(!in_array($version, [1])) {
            throw new Exception('Invalid API version.', 110);
        }
       
        $version_to_actions = [
            1 => ['upload']
        ];
       
        if(!in_array($action, $version_to_actions[$version])) {
            throw new Exception('Invalid API action.', 120);
        }
       
        // API V1 upload
        $source = isset($_FILES['source']) ? $_FILES['source'] : $_REQUEST['source'];
       
        if(is_null($source)) {
            throw new Exception('Empty upload source.', 130);
        }

        if($_FILES['source']['tmp_name']) { // File?
            $source = $_FILES['source'];
            $type = 'file';
        } else {
            if(!G\is_image_url($source)) {
           
                // Base64 comes from POST?
                if($_SERVER['REQUEST_METHOD'] !== 'POST') {
                    throw new Exception('Uploading source base64 must be done using POST method.', 130);
                }
               
                // Fix the $source base64 string
                $source = trim(preg_replace('/\s+/', '', $source));
               
                // From _GET source should be urlencoded base64
                if(!G\timing_safe_compare(base64_encode(base64_decode($source)), $source)){
                    throw new Exception('Invalid base64 string.', 120);
                }
               
                // Set the API temp file       
                $api_temp_file = @tempnam(sys_get_temp_dir(), 'chvtemp');
               
                if(!$api_temp_file or !@is_writable($api_temp_file)) {
                    throw new UploadException("Can't get a tempnam.", 200);
                }
                   
                $fh = fopen($api_temp_file, 'w');
                stream_filter_append($fh, 'convert.base64-decode', STREAM_FILTER_WRITE);
                if(!@fwrite($fh, $source)) {
                    throw new Exception('Invalid base64 string.', 130);
                } else {
                    // Since all the validations works with $_FILES, we're going to emulate it.
                    $source = array(
                        'name'        => G\random_string(12).'.jpg',
                        'type'        => 'image/jpeg',
                        'tmp_name'    => $api_temp_file,
                        'error'        => 'UPLOAD_ERR_OK',
                        'size'        => '1'
                    );
                }
                fclose($fh);
            }
        }
       
        $uploaded_id = CHV\Image::uploadToWebsite($source, User::getSingle('shareimg', 'username'), NULL);
        $json_array['status_code'] = 200;
        $json_array['success'] = array('message' => 'image uploaded', 'code' => 200);
        $json_array['image'] = CHV\Image::formatArray(CHV\Image::getSingle($uploaded_id, false, false), true);
       
        if($version == 1) {
            switch($_REQUEST['format']) {
                default:
                case 'json':
                default:
                    G\Render\json_output($json_array);
                    break;
                case 'txt':
                    echo $json_array['image']['url'];
                    break;
                case 'redirect':
                    if($json_array['status_code'] == 200) {
                        $redirect_url = $json_array['image']['url_viewer'];
                        header("Location: $redirect_url");
                    } else {
                        die($json_array['status_code']);
                    }
                    break;
            }
            die();
        } else {
            G\Render\json_output($json_array);
        }
       
    } catch(Exception $e) {
        $json_array = G\json_error($e);
        if($version == 1) {
            switch($_REQUEST['format']) {
                default:
                case 'json':
                default:
                    G\Render\json_output($json_array);
                    break;
                case 'txt':
                case 'redirect':
                    die($json_array['error']['message']);
                    break;
            }
        } else {
            G\Render\json_output($json_array);
        }
       
    }
};
 

Rodolfo

Chevereto Developer
Chevereto Staff
Joined
Oct 7, 2008
Messages
16,531
Points
237
Location
Chevereto HQ
Website
rodolfoberrios.com
The code from the docs was wrong, this:
PHP:
CHV\Image::uploadToWebsite($source, User::getSingle('shareimg', 'username'), NULL);
Should be this:

PHP:
CHV\Image::uploadToWebsite($source, CHV\User::getSingle('shareimg', 'username'), NULL);
 
Reactions: anmolgill

Rodolfo

Chevereto Developer
Chevereto Staff
Joined
Oct 7, 2008
Messages
16,531
Points
237
Location
Chevereto HQ
Website
rodolfoberrios.com
Sure, but you need to manually add the service endpoints. The original guide was all manual, at this time I don't remember the exact parameters but I remember that you need to add custom service and fill some boxes.
 

djcyry

Network license
License owner
Joined
May 20, 2015
Messages
49
Points
58
Location
Madrid
Hey guys, I've made a guide to use Chevereto with ShareX. With this tool you can upload directly from your desktop. You can upload images, screen captures, etc. You can even define a hotkey for this.

https://chevereto.com/docs/sharex

We will use this topic for questions and concerns about using Chevereto with ShareX.

I have this problem , the chevereto api and url is ok :

Code:
Message:
The remote server returned an error: (400) Bad Request.

Response:
{"status_code":400,"error":{"message":"Flood detected. You can only upload 50 images per minute","code":130,"context":"CHV\\UploadException"},"status_txt":"Bad Request"}

StackTrace:
   at System.Net.HttpWebRequest.GetResponse()
   at ShareX.UploadersLib.Uploader.UploadData(Stream dataStream, String url, String fileName, String fileFormName, Dictionary`2 arguments, NameValueCollection headers, CookieCollection cookies, ResponseType responseType, HttpMethod method, String requestContentType, String metadata)
 

evilmoe2

Not needed
License owner
Joined
Jan 3, 2015
Messages
133
Points
78
Location
Germany
Ok. was the flood protecion .
Can i disabled for admins and users ? thx
Its disabled for admin by default but API v1 does not support user authentification anyway.

You can increase the values for the flood protection, check your dashboard -> settings -> flood protection.
 
Reactions: djcyry

jefflin

Network license
License owner
Joined
Jul 21, 2015
Messages
13
Points
53
Is it posible to record the original URL on Description or somewhere on my Chevereto when user post the image ?

Like the pinterest, then I can know where the orignal image post from.
 
Last edited:

SirMoo

Founder license
Beta tester
Joined
Dec 2, 2013
Messages
375
Points
90
Is it posible to record the original URL on Description or somewhere on my Chevereto when user post the image ?

Like the pinterest, then I can know where the orignal image post from.
I don't believe so. The current API is rather 'dumb' in the sense that it's only task is to upload images without a care.
 
Reactions: jefflin

geekbear

Core license
License owner
Joined
Jan 12, 2016
Messages
8
Points
51
Hi, when i want use shareX 10.9.1

URL : https://geekpics.fr/image
API KEY : (MY KEY)

I have this problem.

StackTrace:
à System.Net.HttpWebRequest.GetResponse()
à ShareX.UploadersLib.Uploader.UploadData(Stream dataStream, String url, String fileName, String fileFormName, Dictionary`2 arguments, NameValueCollection headers, CookieCollection cookies, ResponseType responseType, HttpMethod method, String requestContentType, String metadata)
 

vova8861

Network license
License owner
Joined
Mar 18, 2017
Messages
6
Points
51
Hello Tell me please. How do I build a program with the exe extension from the ShareX source?


From this get this here
 

tunny

Founder license
License owner
Joined
Aug 15, 2012
Messages
76
Points
58
Did someone of you guys tried this out?

https://chevereto.com/docs/api-v1#api-user

PHP:
API user upload workaround
API V1 one doesn't have a way to upload images associated with a given user but Chevereto comes ready for route overriding and you can easily customize your own API that can accomplish this task. Copy the default app/routes/route.api.php file to something like app/routes/overrides/route.myapi.php folder. We will do our job in this new route.myapi.php file.

Change this:

CHV\Image::uploadToWebsite($source);
To this (replace jesse with the target username or user_id):

// This will upload images to 'jesse' account
CHV\Image::uploadToWebsite($source, 'jesse');
By doing this the /myapi route (Custom API) will now upload images in the name of that user. If you want to use a different API key in this new customized API simply change this:

!G\timing_safe_compare(CHV\getSetting('api_v1_key'), $_REQUEST['key'])
To this:

!G\timing_safe_compare('NowThisIsAnotherAPIKEY!', $_REQUEST['key'])
By doing this you will be able to use the default API (/api) with one key and the customized API (/myapi) with another key.
Uploading to the Useraccount is working fine! But everytime i get this response from Sharex itself:
https://hastebin.com/awucajofix.xml

Any ideas guys?