kyv / rockola

rockola radiofonica
3 stars 3 forks source link

subir, descargar #1

Closed kyv closed 11 years ago

kyv commented 12 years ago

debe de permitir subida y de audios a la rockola.

fitorec commented 12 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.

fitorec commented 12 years ago

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.

kyv commented 12 years ago

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.

kyv commented 12 years ago

acerca del permisos de apache y carpetas, tambien podemos emplear ACLs en linux.

kyv commented 12 years ago

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

fitorec commented 12 years ago

Chido :+1: en la nochesita me pongo a códificar un poco al respecto.

kyv commented 12 years ago

ayudo. espero que subes algo para ver en que dirección vamos.

fitorec commented 12 years ago

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.

kyv commented 11 years ago

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?

kyv commented 11 years ago

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

fitorec commented 11 years ago

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.

kyv commented 11 years ago

Agregé logica básica para el backend de subidas con nginx.

f203fcd7aabe3fb2ba4a40c4edb22e587b3fdb78

no es a 100% pero sirve de ejemplo.

fitorec commented 11 years ago

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í.

fitorec commented 11 years ago

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..

kyv commented 11 years ago

yo instalé ruby 1.9.2 seguido los indicaciones de octopress. http://octopress.org/docs/setup/. espero que te sirve

fitorec commented 11 years ago

tnks, lo voy a revisar ahorita mismo.

kyv commented 11 years ago

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

kyv commented 11 years ago

subidas actualmente funcionan. igual si puede ver detalles como barra de progreso y lo demás aparte