Closed kyv closed 11 years ago
Sí, es algo que había pensado, el detalle estaría en un sistema de login para el usuario.
Una forma que se me ocurre ahora(cosa de analizarlo bien), estaba yo pensando un sistema simple de acceso a través de la configuración del sistema, se me ocurre que por ejemplo cada usuario valido tenga una carpeta en media, p.e.
media/
├── radioteca
├── radio_ixtlan
└── radio_etc
Desde el directorio podríamos usar la configuración de restricción de directorios de apache.
http://httpd.apache.org/docs/2.2/howto/auth.html
No lo se, estoy revisando apenas la doc., pero a mi parecer no creo que sea tan difícil de configurar un sistema de accesos con puro apache.
Una vez identificado el usuario en su carpeta tendría un formulario que les permita subir los archivos.
Otra cosa que podríamos usar seria el git-media, se me ocurre algo similar a:
.-----------.
| Hooks |
.----------. |-----------| .------------.
| GitHub |<->|PostReceive|<->| Flujos.org |
'----------' | Email | '------------'
| rockHook |
'-----------' Sistema de ganchos
En la imagen se muestra el post-receive el cual es un gancho que básicamente cuando empujas algún cambio en el repositorio, envía una notificación por medio de un HttpRequest usando el método post
, enviando en formato json
información del repositorio, del autor y los commits.
Como quien envía los datos es el github uno puede hacer una lista blanca de las ips del github las cuales serán las únicas validas para realizar algún cambio este gancho lo he ocupado y se me hace una forma interesante y simple de ligar servicios.
El detalle es que dependemos de otro servicio, pero... podríamos ocupar estos servicios](https://github.com/github/github-services) directamente en el servidor de la Rockola, el problema que aquí le veo es que en general los usuarios que quieran agregar un audio tendrían que ocupar git y la verdad no se que tan factible seria esto.
Si yo he estado pensando en unos opciones parecidas. No habia pensado en utilizar apache directamente. Tambien la idea de utilizar incrond. Aqui los pongo aun que son algo confusos.
Pregunto si seria possible utilizar puro javascript para autentificacion y guardar cookies en el cliente para reconocerlos. Si es necesario algo server side, podemos utilizar puro apache como dices, o quiza un sencillo API que que construimos con RubyOnRails o algo mas sencillo como sinatra (o lo que sea en realidad). Esta API al recibir peticiones para audio, devuelva un json con todo data relacionado con el audio. Y asi podemos mantener un base de datos sencillo de autenficacion (con sqlite).
El mismo API recibe peticiones de PUT para un nuevo audio, y la guarda en la carpeta media como dices tu. Ademas pide al usuario que llena metadatos: artista, usuario, replaygain, bpm, etc.
Otro idea es no utilizar un API, sino al momento de subir un audio, es escaneado y el json producido en el momento. Y nuestra javascript navegaria entro los descripciones de las audio en formato json.
Ahora los ficheros en la carpeta media, al subirlos, si toman su SHA256, y tambien si guarda en los metadatos del audio su huella. De forma automatica estos los audios baja '/media' de manera automatica si injectan en un repo de git a treves de git media. Podria al parecer inecesario eso de gitmedia, pero la idea es que si uno quiere clonar la rockola, para tener la biblioteca de musica localmente, eso debe de ser possible. y con git media tenemos forma de rastrear los audios inclusive si si empiezan a mover de servidor.
acerca del permisos de apache y carpetas, tambien podemos emplear ACLs en linux.
ejemplo para subidas con nginx + javascript: http://wiki.nginx.org/HttpUploadProgressModule#Usage_with_jQuery_Upload_Progress
ejemplo de autenficacion con nginx + cookies: https://gist.github.com/2031652
modulo para autentificacion con nginx + sqlite https://github.com/kunal/sqlite-http-basic-auth-nginx-module
Chido :+1: en la nochesita me pongo a códificar un poco al respecto.
ayudo. espero que subes algo para ver en que dirección vamos.
Disculpa man he andado bastante atareado, para ser honesto no he leido todas las ligas que me enviaste, espero darle una revisada la documentación hoy y de ser posible empezar a códificar algo por la noche.
Hice unos experimentos localmente y pude subir audios con el modulo de nginx. Ahora lo que hace nginx es subir el audio a /tmp y devovlver la ruta, nombre y md5. Asi que requiere de un backend
para recibir esta informacion y mover el audio a su lugar final de descanso. Buscando que seria la forma mas sencillo, empezé probar con sinatra, http://www.sinatrarb.com/. Pero necesito entender mejor el sintaxis de ruby. Otro surgerencia?
ejemplo de salida de nginx:
{"file1.name"=>"boom.png", "file1.content_type"=>"image/png", "file1.path"=>"/tmp/8/0000000008", "file1.md5"=>"4b4e4d05b2d928a00d9262e6fea8eea8", "file1.size"=>"12753", "submit"=>"Upload"}
ejemplo de nginx config y script de sinatra para imprimir lo info de fichero proprocionado por nginx. https://github.com/kyv/rockola/tree/upload/nginx
Otro surgerencia?
No me parece bien, de igual forma tendre que darle una revisada a ruby pero de ahí en fuera me parece muy buena opción.
Agregé logica básica para el backend
de subidas con nginx.
f203fcd7aabe3fb2ba4a40c4edb22e587b3fdb78
no es a 100% pero sirve de ejemplo.
Me parce bien acabe de actualizar mi rama update
, precisamente ayer estuve estudiando un poco la documentación de Sinatra se me hizo muy interesante la forma como rompe el esquema MVC basándose más en recursos y en tipos de RequestsHttps.
En un rato reviso la modificación que me comentas y te agrego algún comentario por aquí.
Sabes tengo un problema para correr sinatra, al ejecutar ruby -rubygems
me genera el siguiente error:
rbenv: version `1.9.2-p290' is not installed
Seguí estas instrucciones stackoverflow - error-when-running-rails-with-ruby-1-9-2-under-rvm pero no lo he logrado solucionar, seguiré intentando..
yo instalé ruby 1.9.2 seguido los indicaciones de octopress. http://octopress.org/docs/setup/. espero que te sirve
tnks, lo voy a revisar ahorita mismo.
he implementado un registro de usuarios, d73a50cde
ahora probando si puede subir ficheros, estos ficheros si guardan por su huella md5, y son enlazados atreves de su titulo. Ademas si guarda un registro de sqlite.
la ruta final del ficheros seria: settings.html_path + "/" + id.to_s + "/" + name
donde 'id' es el id de usaurio (de 1 a infinidad)
para encontrar un audio hay rutas como el siguente: 'rockola.flujos.org/media/md5'
donde 'md5' es la huella md5 del fichero. y 'rockola.flujos.org/media/md5/json' que es lo mismo pero en lugar de devolver html devuelve json. ademas 'rockola.flujos.org/media' devolvera un listado de medios.
ahora estaria bien si podrias ayudar con el javascript, para pude cargar dinamicamente estes audios, o listados de audios, a treves del json producido por upload.rb
subidas actualmente funcionan. igual si puede ver detalles como barra de progreso y lo demás aparte
debe de permitir subida y de audios a la rockola.