Ejemplo n.º 1
0
  def render_GET(self, request):
    tr = re.compile('.*/(\d*)$')
    m = re.match(tr, request.path)
    if len(m.groups()) == 0:
      request.setResponseCode(400) # Bad request
      return "Error: Bad request."
    update_id = m.groups()[0]
    
    macdb = DbHelper()
    upd = macdb.fetch_by_id(int(update_id))
    
    if upd == None:
      request.setResponseCode(404) # Bad request
      return "Error: Not found."
      
    macdb.delete(int(update_id))
    
    try:
      activeStream = open(Config.macActiveVersionFile, 'r')
      try:
        vt = activeStream.readline().strip(' \t\n\r')
      finally:
        activeStream.close()

      if vt == upd['version']:
        newLatest = macdb.fetch_latest()
        if newLatest == None:
          #delete file
          os.remove(Config.macActiveVersionFile)
        else:
          activeStream = open(Config.macActiveVersionFile, 'w')
          try:
            activeStream.write(newLatest['version'] + '\n')
          finally:
            activeStream.close()
          
    except IOError:
      pass
    
    macdb.cleanup()
        
    return """<!DOCTYPE html>
Ejemplo n.º 2
0
    def render_GET(self, request):
        tr = re.compile('.*/(\d*)$')
        m = re.match(tr, request.path)
        if len(m.groups()) == 0:
            request.setResponseCode(400)  # Bad request
            return "Error: Bad request."
        update_id = m.groups()[0]

        macdb = DbHelper()
        upd = macdb.fetch_by_id(int(update_id))

        if upd == None:
            request.setResponseCode(404)  # Bad request
            return "Error: Not found."

        macdb.delete(int(update_id))

        try:
            activeStream = open(Config.macActiveVersionFile, 'r')
            try:
                vt = activeStream.readline().strip(' \t\n\r')
            finally:
                activeStream.close()

            if vt == upd['version']:
                newLatest = macdb.fetch_latest()
                if newLatest == None:
                    #delete file
                    os.remove(Config.macActiveVersionFile)
                else:
                    activeStream = open(Config.macActiveVersionFile, 'w')
                    try:
                        activeStream.write(newLatest['version'] + '\n')
                    finally:
                        activeStream.close()

        except IOError:
            pass

        macdb.cleanup()

        return """<!DOCTYPE html>
Ejemplo n.º 3
0
    def render_POST(self, request):
        macdb = DbHelper()
        
        versionRegex = re.compile('^\d+\.\d+\.\d+\.\d+$')
        if not versionRegex.match(request.args['newVersion'][0]):
            request.setResponseCode(400) # Bad request
            return "Error: malformed version number."

        latest = macdb.fetch_latest()
        
        if latest != None and versionCompare(latest['version'], request.args['newVersion'][0]) != -1:
            request.setResponseCode(400) # Bad request
            return "Error: version number invalid. Supply version number greater than old version."
        
        newRecord = {};
        newRecord['version'] = request.args['newVersion'][0]
        newRecord['dmg_path'] = os.path.join(Config.bitpopDirectory, 'mac', 
                                                'BitPop-' + newRecord['version'] + '.dmg')
        newRecord['dmg_size'] = str(len(request.args['fileToUpload'][0]))

        outDir = os.path.join(Config.bitpopDirectory, 'mac')
        if not os.path.exists(outDir):
            os.mkdir(outDir, 0755)
        elif not os.path.isdir(outDir):
            os.remove(outDir)
            os.mkdir(outDir, 0755)
        filename = newRecord['dmg_path']

        try:
            outputStream = open(filename, 'wb')
            try:
              outputStream.write(request.args['fileToUpload'][0])
            finally:
              outputStream.close()

#            sha = hashlib.new('sha1')
#            sha.update(request.args['fileToUpload'][0])
#            hash = base64.b64encode(sha.digest())
            
            os.system('openssl dgst -sha1 -binary < "{0}" | openssl dgst -dss1 -sign "dsa_priv.pem" | \
                       openssl enc -base64 > sig.txt'.format(filename))
            
            sig = open('sig.txt', 'r')
            try:
              tsig = sig.readline()
            finally:
              sig.close()
            
            # md = EVP.MessageDigest('sha1')
            # md.update(request.args['fileToUpload'][0])
            # digest = md.final()
            # 
            # dsa = DSA.load_key(Config.dsaPrivateKeyFile)
            # sig = dsa.sign_asn1(digest)
            newRecord['dsa_signature'] = tsig.strip('\n\r\t ')
            newRecord['rel_notes'] = request.args['releaseNotes'][0];
            
            macdb.insert(newRecord)
            
            activeStream = open(Config.macActiveVersionFile, 'w')
            try:
              activeStream.write(newRecord['version'] + "\n")
            finally:
              activeStream.close()
        except IOError:
            request.setResponseCode(500) # Internal server error
            return "Error: Internal Server Error. Failed to do some file operation."

        macdb.cleanup()

        return "OK. File was successfully uploaded to server."
Ejemplo n.º 4
0
    def render_POST(self, request):
        macdb = DbHelper()

        versionRegex = re.compile('^\d+\.\d+\.\d+\.\d+$')
        if not versionRegex.match(request.args['newVersion'][0]):
            request.setResponseCode(400)  # Bad request
            return "Error: malformed version number."

        latest = macdb.fetch_latest()

        if latest != None and versionCompare(
                latest['version'], request.args['newVersion'][0]) != -1:
            request.setResponseCode(400)  # Bad request
            return "Error: version number invalid. Supply version number greater than old version."

        newRecord = {}
        newRecord['version'] = request.args['newVersion'][0]
        newRecord['dmg_path'] = os.path.join(
            Config.bitpopDirectory, 'mac',
            'BitPop-' + newRecord['version'] + '.dmg')
        newRecord['dmg_size'] = str(len(request.args['fileToUpload'][0]))

        outDir = os.path.join(Config.bitpopDirectory, 'mac')
        if not os.path.exists(outDir):
            os.mkdir(outDir, 0755)
        elif not os.path.isdir(outDir):
            os.remove(outDir)
            os.mkdir(outDir, 0755)
        filename = newRecord['dmg_path']

        try:
            outputStream = open(filename, 'wb')
            try:
                outputStream.write(request.args['fileToUpload'][0])
            finally:
                outputStream.close()

#            sha = hashlib.new('sha1')
#            sha.update(request.args['fileToUpload'][0])
#            hash = base64.b64encode(sha.digest())

            os.system(
                'openssl dgst -sha1 -binary < "{0}" | openssl dgst -dss1 -sign "dsa_priv.pem" | \
                       openssl enc -base64 > sig.txt'.format(filename))

            sig = open('sig.txt', 'r')
            try:
                tsig = sig.readline()
            finally:
                sig.close()

            # md = EVP.MessageDigest('sha1')
            # md.update(request.args['fileToUpload'][0])
            # digest = md.final()
            #
            # dsa = DSA.load_key(Config.dsaPrivateKeyFile)
            # sig = dsa.sign_asn1(digest)
            newRecord['dsa_signature'] = tsig.strip('\n\r\t ')
            newRecord['rel_notes'] = request.args['releaseNotes'][0]

            macdb.insert(newRecord)

            activeStream = open(Config.macActiveVersionFile, 'w')
            try:
                activeStream.write(newRecord['version'] + "\n")
            finally:
                activeStream.close()
        except IOError:
            request.setResponseCode(500)  # Internal server error
            return "Error: Internal Server Error. Failed to do some file operation."

        macdb.cleanup()

        return "OK. File was successfully uploaded to server."