mirror of
				https://github.com/minio/minio.git
				synced 2025-11-04 02:01:05 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			130 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
/*
 | 
						|
 * Minimalist Object Storage, (C) 2015 Minio, Inc.
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
 | 
						|
package web
 | 
						|
 | 
						|
import (
 | 
						|
	"bytes"
 | 
						|
	"encoding/json"
 | 
						|
	"log"
 | 
						|
	"net/http"
 | 
						|
	"path"
 | 
						|
 | 
						|
	"github.com/gorilla/mux"
 | 
						|
	"github.com/minio-io/minio/pkg/api/config"
 | 
						|
	"github.com/minio-io/minio/pkg/utils/crypto/keys"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	defaultWeb = "polygon"
 | 
						|
)
 | 
						|
 | 
						|
type webAPI struct {
 | 
						|
	conf    config.Config
 | 
						|
	webPath string
 | 
						|
}
 | 
						|
 | 
						|
// No encoder interface exists, so we create one.
 | 
						|
type encoder interface {
 | 
						|
	Encode(v interface{}) error
 | 
						|
}
 | 
						|
 | 
						|
// HTTPHandler - http wrapper handler
 | 
						|
func HTTPHandler() http.Handler {
 | 
						|
	mux := mux.NewRouter()
 | 
						|
	var api = webAPI{}
 | 
						|
 | 
						|
	if err := api.conf.SetupConfig(); err != nil {
 | 
						|
		log.Fatal(err)
 | 
						|
	}
 | 
						|
 | 
						|
	api.webPath = path.Join(api.conf.GetConfigPath(), defaultWeb)
 | 
						|
	mux.Handle("/{polygon:.*}", http.FileServer(http.Dir(api.webPath))).Methods("GET")
 | 
						|
	mux.HandleFunc("/access", api.accessHandler).Methods("POST")
 | 
						|
	return mux
 | 
						|
}
 | 
						|
 | 
						|
func writeResponse(w http.ResponseWriter, response interface{}) []byte {
 | 
						|
	var bytesBuffer bytes.Buffer
 | 
						|
	var encoder encoder
 | 
						|
	w.Header().Set("Content-Type", "application/json")
 | 
						|
	encoder = json.NewEncoder(&bytesBuffer)
 | 
						|
	w.Header().Set("Server", "Minio Management Console")
 | 
						|
	w.Header().Set("Connection", "close")
 | 
						|
	encoder.Encode(response)
 | 
						|
	return bytesBuffer.Bytes()
 | 
						|
}
 | 
						|
 | 
						|
func (web *webAPI) accessHandler(w http.ResponseWriter, req *http.Request) {
 | 
						|
	var err error
 | 
						|
	var accesskey, secretkey []byte
 | 
						|
	username := req.FormValue("username")
 | 
						|
	if len(username) <= 0 {
 | 
						|
		w.WriteHeader(http.StatusBadRequest)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	err = web.conf.ReadConfig()
 | 
						|
	if err != nil {
 | 
						|
		w.WriteHeader(http.StatusInternalServerError)
 | 
						|
		w.Write([]byte(err.Error()))
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	if web.conf.IsUserExists(username) {
 | 
						|
		w.WriteHeader(http.StatusConflict)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	var user = config.User{}
 | 
						|
	user.Name = username
 | 
						|
 | 
						|
	accesskey, err = keys.GenerateRandomAlphaNumeric(keys.MinioAccessID)
 | 
						|
	if err != nil {
 | 
						|
		w.WriteHeader(http.StatusInternalServerError)
 | 
						|
		w.Write([]byte(err.Error()))
 | 
						|
		return
 | 
						|
	}
 | 
						|
	user.AccessKey = string(accesskey)
 | 
						|
 | 
						|
	secretkey, err = keys.GenerateRandomBase64(keys.MinioSecretID)
 | 
						|
	if err != nil {
 | 
						|
		w.WriteHeader(http.StatusInternalServerError)
 | 
						|
		w.Write([]byte(err.Error()))
 | 
						|
		return
 | 
						|
	}
 | 
						|
	user.SecretKey = string(secretkey)
 | 
						|
 | 
						|
	web.conf.AddUser(user)
 | 
						|
	err = web.conf.WriteConfig()
 | 
						|
	if err != nil {
 | 
						|
		w.WriteHeader(http.StatusInternalServerError)
 | 
						|
		w.Write([]byte(err.Error()))
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	err = web.conf.ReadConfig()
 | 
						|
	if err != nil {
 | 
						|
		w.WriteHeader(http.StatusInternalServerError)
 | 
						|
		w.Write([]byte(err.Error()))
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	// Get user back for sending it over HTTP reply
 | 
						|
	user = web.conf.GetUser(username)
 | 
						|
	w.Write(writeResponse(w, user))
 | 
						|
}
 |