migrate most of logic into sub package, implement http.FileSystem