# GET request get '/envelope-sample' do haml :envelope_sample end # POST request to handle callback when document was signed post '/envelope-sample/sign' do # Content Type of callback is application/json data = JSON.parse(request.body.read) begin raise 'Empty params!' if data.empty? #create empty file and write data as "key: value" to it out_file = File.new('signed', 'w') data.each do |key, value| out_file.write("#{key}: #{value} \n") end out_file.close rescue Exception => e err = e.message end end # POST request to handle callback and download envelop when document was signed post '/envelope-sample/sign-and-download' do data = JSON.parse(request.body.read) begin raise 'Empty params!' if data.empty? GroupDocs.configure do |groupdocs| groupdocs.client_id = '' # Your client Client ID here groupdocs.private_key = '' # Your API Key here groupdocs.api_server = 'https://api.groupdocs.com' end data.each do |key, value| if key == 'SourceId' # Create envelop with id and name as SourceId parameter from callback envelope = GroupDocs::Signature::Envelope.new id: value, name: value # download signed documents as archive envelope.signed_documents! '.' end end rescue Exception => e err = e.message end end # GET request to check if envelop was signed get '/envelope-sample/check' do if File.exist?('signed') File.readlines('signed').each do |line| end else 'Have not signed yet' end end # POST request post '/envelope-sample' do set :client_id, params[:client_id] set :private_key, params[:private_key] begin raise 'Please enter all required parameters' if settings.client_id.empty? or settings.private_key.empty? GroupDocs.configure do |groupdocs| groupdocs.client_id = params[:client_id] groupdocs.private_key = params[:private_key] groupdocs.api_server = 'https://stage-api.groupdocs.com' end # upload document filepath = "#{Dir.tmpdir}/#{params[:file][:filename]}" File.open(filepath, 'wb') { |f| f.write(params[:file][:tempfile].read) } file = GroupDocs::Storage::File.upload!(filepath, {}, client_id: settings.client_id, private_key: settings.private_key) document = file.to_document # create envelope envelope = GroupDocs::Signature::Envelope.new envelope.name = 'Envelope' envelope.email_subject = 'Sing this!' envelope.create! # add document to envelope envelope.add_document! document # update document object after it's created document = envelope.documents!.first # add new recipient to envelope roles = GroupDocs::Signature::Role.get! recipient = GroupDocs::Signature::Recipient.new recipient.email = 'john@smith.com' recipient.first_name = 'John' recipient.last_name = 'Smith' recipient.role_id = roles.detect { |role| role.name == 'Signer' }.id envelope.add_recipient! recipient # update recipient object after it's created recipient = envelope.recipients!.first # # You can add fields manually. # # add city field to envelope #field = GroupDocs::Signature::Field.get!.detect { |f| f.type == :single_line } #field.name = 'City' #field.location = { location_x: 0.3, location_y: 0.2, page: 1 } #envelope.add_field! field, document, recipient # add signature field to envelope #field = GroupDocs::Signature::Field.get!.detect { |f| f.type == :signature } #field.location = { location_x: 0.3, location_y: 0.3, page: 1 } #envelope.add_field! field, document, recipient # URL for callback #webhook = 'http://groupdocs-ruby-samples.herokuapp.com/envelope-sample/sign' webhook = 'http://77.81.243.48/?q=groupdocs_signature/signature_callback' # send envelope envelope.send! webhook # construct embedded signature url url = "https://stage-apps.groupdocs.com/signature/signembed/#{envelope.id}/#{recipient.id}" iframe = "" rescue Exception => e err = e.message end haml :envelope_sample, :locals => {:client_id => settings.client_id, :private_key => settings.private_key, :err => err, :iframe => iframe} end