示例#1
0
文件: static.go 项目: fxnn/gone
func (l *StaticLoader) WriteAllTemplates(targetDir gopath.GoPath) error {
	if err := os.MkdirAll(targetDir.Path(), 0777); err != nil {
		return fmt.Errorf("couldn't create dir %s: %s", targetDir, err)
	}

	for _, name := range resources.AllFileNames {
		var targetFile = targetDir.JoinPath(name)
		if targetFile.HasErr() {
			return fmt.Errorf("couldn't create path for template %s: %s", name, targetFile.Err())
		}

		content, err := resources.FSString(l.useLocalTemplates, name)
		if err != nil {
			return fmt.Errorf("couldn't open template %s: %s", name, err)
		}

		err = os.MkdirAll(targetFile.Dir().Path(), 0777)
		if err != nil {
			return fmt.Errorf("couldn't create directory %s: %s", targetFile.Dir().Path(), err)
		}

		out, err := os.Create(targetFile.Path())
		if err != nil {
			return fmt.Errorf("couldn't create file %s: %s", targetFile, err)
		}

		out.WriteString(content)
		if out.Close(); err != nil {
			return fmt.Errorf("couldn't close file %s: %s", targetFile, err)
		}
	}

	return nil
}
示例#2
0
文件: http.go 项目: fxnn/gone
func createBasicAuth(realmName string, htpasswdFile gopath.GoPath) *auth.BasicAuth {
	var secretProvider = noSecrets
	if !htpasswdFile.HasErr() && !htpasswdFile.IsEmpty() {
		secretProvider = auth.HtpasswdFileProvider(htpasswdFile.Path())
	}
	return auth.NewBasicAuthenticator(realmName, secretProvider)
}
示例#3
0
func isFileWriteable(p gopath.GoPath) bool {
	if p.IsExists() {
		var closer, err = os.OpenFile(p.Path(), os.O_WRONLY, 0)
		if closer != nil {
			closer.Close()
		}

		return err == nil
	}

	return isDirWriteable(p.Dir())
}
示例#4
0
文件: pathio.go 项目: fxnn/gone
func (i *pathIO) openReaderAtPath(p gopath.GoPath) (reader io.ReadCloser) {
	i.assertPathValidForAnyAccess(p)
	if i.hasErr() {
		i.prependErr(fmt.Sprintf("cannot open reader for '%s'", p))
		return nil
	}

	reader, err := os.Open(p.Path())
	i.setErr(err)
	i.prependErr(fmt.Sprintf("couldn't open reader for '%s'", p))

	return
}
示例#5
0
文件: pathio.go 项目: fxnn/gone
func (i *pathIO) openWriterAtPath(p gopath.GoPath) (writer io.WriteCloser) {
	i.assertPathValidForAnyAccess(p)
	i.assertPathValidForWriteAccess(p)
	if i.hasErr() {
		i.prependErr(fmt.Sprintf("cannot open writer for '%s'", p))
		return nil
	}

	writer, err := os.Create(p.Path())
	i.setErr(err)
	i.prependErr(fmt.Sprintf("couldn't open writer for '%s'", p))

	return
}
示例#6
0
文件: file.go 项目: fxnn/gone
// NewFilesystemLoader creates a new instance with templates located in the
// given root path.
func NewFilesystemLoader(root gopath.GoPath) *FilesystemLoader {
	if root.HasErr() {
		panic(fmt.Sprintf("NewFilesystemLoader: root has error: %s", root.Err()))
	}
	if !root.IsExists() {
		panic(fmt.Sprintf("NewFilesystemLoader: root %s does not exist", root.Path()))
	}

	watcher, err := fsnotify.NewWatcher()
	if err != nil {
		panic(fmt.Sprintf("NewFilesystemLoader: can't open watcher: %s", err))
	}

	var loader = &FilesystemLoader{
		root,
		watcher,
		make(map[string]chan *template.Template),
		make(map[string]string)}
	go loader.processEvents()
	return loader
}
示例#7
0
文件: pathio.go 项目: fxnn/gone
// assertPathValidForWriteAccess sets the error flag when the path may not be
// opened for writing by this process.
func (i *pathIO) assertPathValidForWriteAccess(p gopath.GoPath) {
	if i.hasErr() {
		return
	}
	if p.HasErr() {
		i.setErr(p.Err())
		return
	}

	if p.IsExists() {
		if !p.IsRegular() || !isPathWriteable(p) {
			i.setErr(store.NewAccessDeniedError(fmt.Sprintf(
				"path '%s' with mode %s denotes no regular file or no writeable directory",
				p.Path(), p.FileMode())))
		}
	} else {
		var d = p.Dir()
		if !isPathWriteable(d) {
			i.setErr(store.NewAccessDeniedError(
				"parent directory of '" + p.Path() + "' is not writeable"))
		}
	}
}
示例#8
0
文件: pathio_unix.go 项目: fxnn/gone
func isPathWriteable(p gopath.GoPath) bool {
	return unix.Access(p.Path(), unix.W_OK) == nil
}