• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

JoaoRodrigues

GetThatPaper! - Obtenção de artigos científicos de modo comunitário [31.Oct]

30 mensagens neste tópico

Título do Projecto: GetThatPaper!

Última Versão: Mock-Up! Não funciona!

Endereço: http://www.stanford.edu/~joaor/

Licença: N/A

Líder do Projecto: João Rodrigues

Screenshots: http://www.stanford.edu/~joaor/

Descrição do Projecto

Motivação

A obtenção de artigos científicos da internet não é trivial para os utilizadores de universidades com poucos recursos financeiros. Quando o utilizador tenta aceder a um artigo é muitas vezes confrontado com a opção de comprar o PDF em vez de o descarregar gratuitamente. Para outro utilizador, ligado à reder por uma universidade com maior capacidade financeira - e daí com um provável maior número de acordos com revistas - o mesmo artigo pode-se encontrar disponível gratuitamente.

Recorre-se então habitualmente ao espírito de comunidade. Um email, uma mensagem, ou um telefonema são por vezes o bastante para obter o tão desejado artigo. Seja para o próprio autor, e aí depende-se da boa vontade do mesmo, ou para um amigo colocado numa universidade diferente, e aí depende-se também da boa vontade e da esperança que este tenha o tal acesso. E se fosse possível automatizar este processo de pedido de favores?

Conceito

A ideia é simples. Estabelecer um servidor, de espaço mínimo, onde cada utilizador pode deixar até um máximo de 5 links DIRECTOS para ficheiros PDF que não consegue descarregar. Ficam 2 exemplos de links directos:

http://www.springerlink.com/content/m9838214803520t8/fulltext.pdf

http://www3.interscience.wiley.com/cgi-bin/fulltext/122582374/PDFSTART

Para deixar artigos, é aconselhável descarregar um pequeno script que corre em modo background. Aconselhável... ao espírito de comunidade. Esse script iria aceder à lista de artigos no servidor que ainda não tivessem sido resolvidos e tentaria, com a ligação disponível do utilizador, descarregá-los para o servidor. Cada link no servidor teria um tempo de vida de 72 horas enquanto cada PDF estaria armazenado apenas 24h (para poupar espaço).

Como se vê no segundo exemplo vai haver problemas em resolver certos PDFs porque os servidores das revistas gostam de manter debaixo de olho quem lá anda (ie. Cookies).

Detalhes Técnicos

O sistema seria implementado em Python + Apache. O servidor teria uma interface mínima, com um login geral (guest) criado para utilizadores esporádicos e um login mais específico (nome apenas, sem password, informação básica para estatísticas) para acesso mais organizado. Cada utilizador teria apenas espaço para 5 links (IP Matching).

A servir o sistema estaria uma base de dados, provavelmente em SQLite por razões de simplicidade, se bem que um sistema baseado em XML também não é de excluir. Campos mínimos como nome (um nome gerado aleatoriamente para os guests), IP, Links, PDFs. No caso de ser um utilizador fixo (com nome atribuido portanto) teria outra secção (ou tabela) com informação sobre o número de pedidos feitos, número de pedidos resolvidos, localização, instituição. Simples, nada que dê para identificar a pessoa, mas sim a quantidade de serviço prestada/requisitada e a localização.

O script seria o mais simples possível. Uma camada para descarregar informação do servidor relativamente aos links, outra para processar os pedidos, e uma última para fazer o upload dos PDFs. Impor-se-ia um limite de uso do script para tornar a sua existência quase imperceptível ao utilizador (em termos de perfomance e mesmo de espaço em disco). Diria que processamento de 5 links por hora chega e sobra.

O script não deixaria marcas algumas no computador além de si mesmo. E teria uma maneira simples e eficaz de apagar quaisquer marcas da sua utilização (entradas no registo para inicialização automática, ficheiros temporários, etc). Uma interface bastante simples, CLI.


Não estou a pedir membros, mas toda a ajuda é bem vinda. Eu estou a tomar isto como um projecto pessoal e se estou a postar aqui é porque preciso de motivação. E postando aqui, torna-se real que assumi pensar nisto e não foi só um brain-fart ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Algumas páginas de revistas exigem que o utilizador use cookies e tenha user-agents e coisas assim. Ficam aqui 2 links que encontrei que me permitiram resolver o problema de forma trivial sem grandes complicações:

http://coding.derkeiler.com/Archive/Python/comp.lang.python/2006-04/msg04571.html

http://www.voidspace.org.uk/python/articles/urllib2.shtml

O código que precisei para sacar um PDF da WileyInterscience (cookies needed) foi:

Python 2.6.2 (release26-maint, Apr 19 2009, 01:56:41) 
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import urllib2, cookielib, re
>>> jar = cookielib.CookieJar()
>>> handler = urllib2.HTTPCookieProcessor(jar)
>>> opener = urllib2.build_opener(handler)
>>> urllib2.install_opener(opener)
>>> 
>>> primaryPage = urllib2.urlopen('http://www3.interscience.wiley.com/cgi-bin/fulltext/122582374/PDFSTART').read()
>>> 
>>> primaryPage
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"\n\t"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">\n<!-- BEGIN: journal-article.pdf.tpl -->\n<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">\n\n<head>\n\t<title>Wiley InterScience :: Journal :: Article PDF </title>\n\t\n\t<script language="JavaScript" src="http://download.interscience.wiley.com/freeflow/js/dcs_tag.js"></script>\n\t<!-- SmartSource 8 -->\n\t<meta name="WT.sv" content="" />\n\t<meta name="DCS.dcsuri" content="%2Fcgi-bin%2Ffulltext%2F122582374%2FPDFSTART" />\n\t<meta name="DCS.dcsqry" content="" />\n\t<script type="text/javascript">\n\t\tvar ssDate = new Date();\n\t\tdocument.writeln(\'<meta name="DCS.dcsdat" content="\'+ ssDate.getTime() +\'"\');\n\t</script>\n\t<meta name="DCSext.SiteCd" content="InterScience" />\t\n</head>\n\n<frameset rows="60,*" framespacing="0" frameborder="0" border="0">\n\t<frame src="FILE?TPL=journal-article.pdf-navbar&mode=pdf" name="navbar" id="navbar" scrolling="no" noresize="noresize" marginwidth="0" marginheight="0" />\n\n\t<frameset cols="*,94%,*" framespacing="0" frameborder="0" border="0">\n\t\t<frame src="/blank.html" name="blankL" id="blankL" scrolling="no" noresize="noresize" marginwidth="0" marginheight="0" />\n\t\t<frame src="http://download.interscience.wiley.com/cgi-bin/fulltext?ID=122582374&PLACEBO=IE.pdf&mode=pdf" name="main" id="main" scrolling="auto" marginwidth="0" marginheight="0" />\n\t\t<frame src="/blank.html" name="blankR" id="blankR" scrolling="no" noresize="noresize" marginwidth="0" marginheight="0" />\n\t</frameset>\n\n</frameset>\n\n<noframes>\n\t<body><h2>Frames support is needed to view article full text in PDF.</h2></body>\n</noframes>\n<script type="text/javascript">\n\tvar gDomain="sdc8prod2.wiley.com";\n\tvar gDcsId="dcssml0uh00000wc3covf63ru_7p6k";\n\tvar gFpc="WT_FPC";\n\tvar gConvert=true;\n\n\tif ((typeof(gConvert)!="undefined")&&gConvert&&(document.cookie.indexOf(gFpc+"=")==-1)&&(document.cookie.indexOf("WTLOPTOUT=")==-1)){\n\t\tdocument.write("<SCR"+"IPT TYPE=\'text/javascript\' SRC=\'"+"http"+(window.location.protocol.indexOf(\'https:\')==0?\'s\':\'\')+"://"+gDomain+"/"+gDcsId+"/wtid.js"+"\'><\\/SCR"+"IPT>");\n\t}\n</script>\n</html>\n<!-- END: journal-article.pdf.tpl -->\n'
>>> 
>>> regex = re.compile('(http\:\/\/download.interscience.wiley.com\/.+pdf)')
>>> print re.findall(regex, primaryPage)
['http://download.interscience.wiley.com/cgi-bin/fulltext?ID=122582374&PLACEBO=IE.pdf&mode=pdf']
>>> 
>>> secondaryPage = urllib2.urlopen(re.findall(regex, primaryPage)[0]).read()
>>> file = open('article.pdf', 'w')
>>> file.write(secondaryPage)
>>> file.close() 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Humm, não sei se percebi bem... A tua ideia era criar um sistema que descarregasse os revistas conforme uma pessoa pudesse (ie, estar numa universidade que dá acesso gratuito a essa revista)? Depois enviavam para um website onde podiam partilhar o link?

Até é boa ideia, eu acho que tenho umas revistas de informática estrangeiras na minha faculdade às quais tenho acesso gratuito em formato electrónico, penso que não me custa nada ajudar com algumas, mas tenho de me informar melhor sobre isso.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@Softclean

A ideia era um sistema onde se TU quisesses um artigo que não consegues ter porque a tua universidade não tem privilégios, pudesses depositar o LINK para o artigo. Outras pessoas iriam então, automaticamente, buscar esse link e tentar resolver-te o PDF, e em caso positito, depositá-lo no servidor.

@_JR_

Pois, não sei. Eu quando descarrego um artigo não me diz absolutamente nada sobre se ele tem que ser para uso pessoal, para uso académico, etc. Nada. Não passo por nenhum passo onde me seja mostrado ou sequer apontado para um conjunto de normas legais sobre os direitos que tenho sobre o ficheiro. O que eu sei é que publicares numa revista é o equivalente a licenciares software em GPL: torna-se público, desde que te citem.

Agora, toda a gente tira PDFs daqui e dali para dar a este e aquele. Professores fazem isso para os alunos (e vice-versa quando o aluno tá num sítio melhor eheh), colegas para colegas, etc. Um sistema como este não daria acesso directo ilimitado a nada. Não é como que abrir uma porta para uma revista inteira. É proporcionar uma tentativa extra para tentar obter o artigo com base no que habitualmente já se faz: pedir ao próximo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eish...granda bronca, nem reparei que tinha posto o post no sítio errado :thumbsup: Thanks pelo move softclean!

Bem, tive a pensar nesta questão dos direitos. Deixar o PDF pronto a ser descarregado de um servidor é capaz de trazer alguns problemas é. Ao fim de contas, bastava alguém conseguir o URL e tinha acesso ilimitado ao artigo. Não é isso que eu quero. Eu quero acesso individual, tal como se mandasse um mail com o artigo a um amigo meu.

Por isso, decidi mudar um bocado o sistema da coisa. Ainda estou a pensar como, mas em principio será por email/attachment. Um PDF raramente passa dos 2/3 MB e acho que nem o hotmail se queixa :x Além disso, estava a pensar em restringir acesso a emails institucionais e esses normalmente deixam ter attachments decentes.

Quão simples é esta questão do attachment? Alguém já trabalhou com este tipo de módulo em Python?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O mock-up da interface está feito. Para bem ou para mal, agora estou a trabalhar numa versão muito crua do script.

Sugestões?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sei se está planeado, mas uma GUI seria agradável, pois isto pode abranger muitos utilizador sem muito à vontade com a consola.

De resto, acho que a tua ideia é por o software a trabalhar sozinho, vais ter de ver as diversas tecnicas utilizadas por essas páginas para obter os documentos.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu acho que resolvi (pelo menos para todos os casos até agora) o problema de encontrar os PDFs e sacar. Aqui no meu PC estou mesmo a testar uma versãozeca que já me manda para o mail o PDF. Tá-me é a dar erro 500 (apesar de mandar o PDF).

Uma versão GUI do script pode ser pensada mas em principio será algo tão simples que um GUI só iria complicar. Acho eu :thumbsup:

Que achas da página? Alguma sugestão?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Assim à primeira vista, isto deve ter alguns problemas de legalidade... Por exemplo, nos papers retirados do IEEEXplore, nos artigo que eu retiro usando um IP da Universidade do Minho,  no final de cada página aparece a mensagem

Authorized licensed use limited to: UNIVERSIDADE DO MINHO. Downloaded on October 29, 2009 at 14:29 from IEEE Xplore.  Restrictions apply.

Nos da ACM também temos habitualmente uma mensagem a indicar em que condições é que temos permissão para o usar ou distribuir (mas a ACM já costuma fornecer acesso livre para fins pessoais ou académicos, independentemente da instituição).

Parece-me que pedir um paper por email a alguém que tem acesso legal a ele, é como pedir a alguém que tem uma música para nos arranjar a mesma, i.e., é uma coisa que toda a gente faz, apesar de não ser legal. Penso que até os autores dos papers nem sempre os podem distribuir livremente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O sistema seria implementado em Python + Apache. O servidor teria uma interface mínima, com um login geral (guest) criado para utilizadores esporádicos e um login mais específico (nome apenas, sem password, informação básica para estatísticas) para acesso mais organizado. Cada utilizador teria apenas espaço para 5 links (IP Matching).

A servir o sistema estaria uma base de dados, provavelmente em SQLite por razões de simplicidade, se bem que um sistema baseado em XML também não é de excluir. Campos mínimos como nome (um nome gerado aleatoriamente para os guests), IP, Links, PDFs. No caso de ser um utilizador fixo (com nome atribuido portanto) teria outra secção (ou tabela) com informação sobre o número de pedidos feitos, número de pedidos resolvidos, localização, instituição. Simples, nada que dê para identificar a pessoa, mas sim a quantidade de serviço prestada/requisitada e a localização.

O script seria o mais simples possível. Uma camada para descarregar informação do servidor relativamente aos links, outra para processar os pedidos, e uma última para fazer o upload dos PDFs. Impor-se-ia um limite de uso do script para tornar a sua existência quase imperceptível ao utilizador (em termos de perfomance e mesmo de espaço em disco). Diria que processamento de 5 links por hora chega e sobra.

Duas coisas que eu fazia:

- usar WSGI na construção da web app (http://wsgi.org/wsgi/) é o standard de comunicação entre web app em python e o servidor, assim não ficas limitado ao mod_python que só há para apache. O WSGI corre em todos os servidores desde que tenham CGI, FastCGI ou SGCI, alguns já trazem suporto nativo, como é o caso do Cherokee (http://www.cherokee-project.com/).

- usam um ORM para comunicar com a base de dados, nunca se sabe se projecto cresce e se não precisas de uma BD mais potente, assim poupas trabalho. Tens várias opções de escolha as duas que mais se destacam são o SQLObject( http://sqlobject.org/) e o SQLAlchemy (http://www.sqlalchemy.org/), este segundo é mais poderoso mas a sua aprendizagem é mais difícil.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, isto levou uma reviravolta nas ideias de implementação porque não me apeteceu criar uma BD para andar a pôr e tirar simples strings texto..

Estando isto tudo numa pasta chamada GTP:

GTP

---- html (tem as páginas)

---- cgi-bin (tem scripts para submissão de links e para o cliente sacar links)

      --- processLink.py

      --- getRequest.py

---- temp (armazena os pedidos/pdfs)

      --- requests (pedidos, um ficheiro por pedido)

      --- users (email do user, um ficheiro por pedido) non-readable do lado de fora

      --- files (ficheiros pdf)

---- server

Na pasta TEMP os ficheiros têm sempre o mesmo nome, só muda a extensão. O nome é o IP do utilizador. Ou seja, o utilizador só consegue fazer um pedido de cada vez. Mas, para agora, isto aguenta-se assim. Se o sistema funcionar e tiver adesão suficiente, aumento o número de pedidos para 5 por utilizador.

O ficheiro do processLink.py é simples e está aqui: http://pastebin.org/49895

O ficheiro do getRequest.py é ainda mais simples: http://pastebin.org/49896

O cliente é que me está a dar mais trabalho. Eu tinha pensado, por uma questão de segurança, o cliente apenas fazer o upload do PDF para o servidor, e o servidor em si tratar de relacionar cada PDF com o email respectivo e enviar. Ora, mas aqui é que a porca torce o rabo. Como faço eu um upload destes? Já me lembrei em fazer uma página simples com uma form mas isso permite a qq pessoa andar a fazer uploads desde que saiba a página. Ideias?

O código do cliente fica aqui: http://pastebin.org/49897

As minhas questões portanto são:

1. Como fazer o upload de PDF para o servidor?

2. Têm sugestões/críticas quanto à maneira como isto está a ser desenvolvido?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Teimosão com o WSGI. Explica-me as vantagens e talvez me convenças ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Update: Código do servidor e requests feito.

Uma coisa que não gosto é o de ter que ter a pass e o mail aqui hard-coded...sugestões?

#!/usr/bin/python
# -*- coding: utf-8 -*-

#-- Imports & Constants --#

import cgi, cgitb
import os, time, random, sys
import sqlite3
from urlparse import urlparse
from httplib import HTTP
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

cgitb.enable() # Enable Traceback is good for debugging!

#-- Utility Functions --#

def mail(to, subject, text):
    """Adapted from http://kutuma.blogspot.com/2007/08/sending-emails-via-gmail-with-python.html"""

    gmail_user = "xxxxxx@gmail.com"
    gmail_pwd = "yyyyyyyy"
    
    msg = MIMEMultipart()

    msg['From'] = 'Poya! Server'
    msg['To'] = to
    msg['Subject'] = subject

    msg.attach(MIMEText(text))

    mailServer = smtplib.SMTP("smtp.gmail.com", 587)
    mailServer.ehlo()
    mailServer.starttls()
    mailServer.ehlo()
    mailServer.login(gmail_user, gmail_pwd)
    mailServer.sendmail(gmail_user, to, msg.as_string())
    # Should be mailServer.quit(), but that crashes...
    mailServer.close()

def checkURL(url):
    """Adapted from http://www.daniweb.com/forums/thread165704.html. """

    p = urlparse(url)
    h = HTTP(p[1])
    h.putrequest('HEAD', p[2])
    try:
        h.endheaders()
    except Exception:
        return False
    if h.getreply()[0] == 200: return True
    else: return False

def checkEmail(cursor, value):

    t = (value,)
    cursor.execute("SELECT RandomSeed FROM private WHERE email=?", t)
    rows = cursor.fetchall()
    if len(rows) > 1:
        return False
    else:
        return True

def checkTime(cursor, timevalue, userIP):

    t = (userIP,)
    
    cursor.execute("SELECT reqtime FROM public WHERE IP=?", t)
    rows = cursor.fetchall()
    for i in rows:
        if (int(timevalue)-int(i[0])) < 300: # One minute tolerance
            return False
    return True

#-- Root Directory --#

root = '/home/joao/Desktop/Poya_devel/'

#-- Extract and create user info --#

form = cgi.FieldStorage()

link = form.getvalue("userLink")
email = form.getvalue("userEmail") # Get back to user
IPaddr = cgi.escape(os.environ["REMOTE_ADDR"]) # Limits
randomSeed = str(int(random.random()*(10**8))) # PDF Encryption
requestTime = time.time() # Limits

#-- Sanity checks --#

conn = sqlite3.connect(os.path.join(root, 'db/poya'))
c = conn.cursor()

debug = True
if not debug:
    if (not checkURL(link)) or link == '': # Link is not empty and exists
        print "Content-Type: text/html\n"
        print '<div style="text-align:center; margin-top:100px; font-family:sans-serif;">'
        print '<img src="/Poya/images/bored_cat.jpg" style="margin-bottom:25px;"/>'
        print '<br />'
        print "Hey! Check the link you submitted! It's either blank or it doesn't exist!"
        print '<br /> <br />. .'
        print '<br /> <br /><a style="font-size:8px; color:blue;">If you think this might be an error, please contact me</a>'
        conn.close()
        sys.exit(0)

    if not checkTime(c, requestTime, IPaddr): # Request from the same IP in the last minute
        print "Content-Type: text/html\n"
        print '<div style="text-align:center; margin-top:80px; font-family:sans-serif;">'
        print '<img src="/Poya/images/take_a_break.jpg" style="margin-bottom:25px;"/>'
        print '<br />'
        print 'This might not be your fault, but a request from the same IP address has been made recently. Take a break and try again in 5 minutes!'
        print '<br /> <br />. .'
        print '<br /> <br /><a style="font-size:8px; color:teal;">If this behaviour persists, please contact me</a>'
        conn.close()
        sys.exit(0)

    if not checkEmail(c, email): # Email has submitted a request before
        print "Content-Type: text/html\n"
        print '<div style="text-align:center; margin-top:80px; font-family:sans-serif;">'
        print '<img src="/Poya/images/cookie_monster.jpg" style="margin-bottom:25px;"/>'
        print '<br />'
        print "Hey! One cookie at a time ok? Wait until your previous request is done!"
        print '<br /> <br />. .'
        print '<br /> <br /><a style="font-size:8px; color:teal;">If you think this might be an error, please contact me</a>'
        conn.close()
        sys.exit(0)



#-- Add to database --#

conn = sqlite3.connect(os.path.join(root, 'db/poya')) # Connect / Create SQL database

c = conn.cursor()

t = (int(randomSeed), link, 0, IPaddr, int(requestTime), 0)
c.execute("INSERT INTO public VALUES (?, ?, ?, ?, ?, ?)", t) # public

q = (int(randomSeed), email, 0)
c.execute("INSERT INTO private VALUES (?, ?, ?)", q) #private

conn.commit()

conn.close()

#-- Return Page to User --#


print "Content-Type: text/html\n"
print '<div style="text-align:center; margin-top:80px; font-family:sans-serif;">'
print '<img src="/Poya/images/happy-horse.jpg" style="margin-bottom:25px;"/>'
print '<br />'
print "Your request has been sucessfully submitted! You will receive an email shortly with further instructions. Please read them carefully."
print '<br /> <br />. .'
print '<br /> <br /><a style="font-size:8px; color:teal;">Thank you for using Poya!</a>'


#-- Email User --#

emailMessage = """
Dear user,

You have submitted a request to Poya! with the following details:

Requested PDF Link: %(link)s
Email Address:      %(email)s
IP Address:         %(IP)s

How long it will take for the request to be processed depends on how many clients are connected to the database. Your request will be attempted 5 times by 5 different clients. If they all fail, I am afraid your PDF belongs to a very restricted journal to which is rare to have open access. Consider emailing the author of the paper, of paying for a one-time subscription to the journal.

Poya! depends on users such as you to process the PDF files. Please consider downloading the client script so you too can help others, as they as helping you as you read this.

Thank you for using Poya!

The Frustrated Scientist 

THIS IS AN AUTOMATICALLY SENT EMAIL. REPLIES WILL NEVER REACH ME!""" %{'link':link, 'email':email, 'IP':IPaddr}

mail(email,
   "Poya! request %s" %randomSeed,
    emailMessage)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Suponho que queiras disponibilizar isto open-source, só se colocares um servidor web a fazer essa tarefa, e depois basta chamá-lo com um request, passando-lhe o mail e (o que já não é assim tão boa ideia) o PDF anexo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como está agora funciona assim:

Servidor armazena pedidos e emails em tabelas SQL diferentes.

Cliente comunica com o servidor e só consegue aceder aos pedidos, não aos emails das pessoas que depositaram o pedido.

Cliente descarrega lista de 5 pedidos do servidor e saca os PDFs.

Cliente faz upload, um a um, dos PDFs, dando-lhes uma id unica e previamente estabelecida pelo servidor.

Servidor recebe os PDFs, encripta-os, e envia mail ao utilizador a dizer que já está resolvido o pedido.

O meu problema é, no servidor (este código em cima é o cgi-bin que vai estar no servidor, não é o cliente) esta pass/email estarem escarrapachados. Lembrei-me de os ter num ficheiro à parte, encriptados. Mas isso é overkill acho eu :x

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se está no servidor, está "seguro". Em principio, nenhum cliente tem acesso às credenciais. Essa situação é muito comum na web, por exemplo, em PHP é muito comum deixar as passwords "à vista" em ficheiros de texto plano, sejam de configuração, sejam de PHP.

O essencial é que não estejam visíveis para o público e outros utilizadores do webhosting, o que penso que se resolva com permissões unix adequadas :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah ok então :P Já agora, quais são as permissões habituais deste tipo de coisas? E se eu quiser dar permissão de escrita aos scripts que o apache corre por si ( tipo cgi-bin, ou mesmo um cronjob ) quais devo usar? É que infelizmente tenho usado chmod a+rxw e isso não é bom :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Admitindo que o processo do servidor corre num utilizador diferente do que é proprietário do ficheiro deves precisar de qualquer coisa tipo rwx--x--x. Isto para o ficheiros a executar. Para aqueles que quiseres ler ou escrever vais precisar também das respectivas permissões.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, pergunta idiota, mas como é que defino permissões para um determinado utlizador? É que o meu problema é esse...só sei definir para todos :x

Atira-me um RTFM se for preciso, mas manda-me o link para o manual :P

Abraço e obrigado pelas respostas.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar o modo octal, por exemplo.

4 -> r

2 -> w

1 -> x

1º número para utilizador, 2º para grupo, e 3º para os outros

711 -> rwx--x--x

Dependendo das alterações que queres fazer, podes ter outras formas mais adequadas.

A página da wikipedia () é capaz de ajudar, caso precises de mais informações: http://en.wikipedia.org/wiki/Chmod

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah bom.. pensava que era 1o root, 2o user, 3o outros. Assim basta-me definir o owner com o chown e acrescentar o user do apache ao grupo desse user e restringir acesso aos outros. Right?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou o nosso tutorial do chmod, na wiki!

http://wiki.portugal-a-programar.pt/sistemas_operativos:linux:tutorial_chmod

Quanto ao redefinir para um utilizador em particular, acho que só é válido para o dono do ficheiro. Mas se não me engano, é o Apache que vai correr isso, logo vai pertencer aos "outros", como o Rui Carlos disse ali em cima, e são essas permissões que interessam mais.

Na pior das hipóteses, podes partir de permissões mais restritivas, e ir testando, até obteres isso a funcionar ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora