mirror of https://github.com/minio/minio.git
				
				
				
			
		
			
				
	
	
		
			170 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Go
		
	
	
	
| /*
 | |
|  * Minio Cloud Storage, (C) 2016 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 cmd
 | |
| 
 | |
| /// Auth operations
 | |
| 
 | |
| // Login - login handler.
 | |
| func (c *controllerAPIHandlers) LoginHandler(args *RPCLoginArgs, reply *RPCLoginReply) error {
 | |
| 	jwt, err := newJWT(defaultTokenExpiry)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	if err = jwt.Authenticate(args.Username, args.Password); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	token, err := jwt.GenerateToken(args.Username)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	reply.Token = token
 | |
| 	reply.ServerVersion = Version
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // HealListArgs - argument for ListObjects RPC.
 | |
| type HealListArgs struct {
 | |
| 	// Authentication token generated by Login.
 | |
| 	GenericArgs
 | |
| 
 | |
| 	Bucket    string
 | |
| 	Prefix    string
 | |
| 	Marker    string
 | |
| 	Delimiter string
 | |
| 	MaxKeys   int
 | |
| }
 | |
| 
 | |
| // HealListReply - reply object by ListObjects RPC.
 | |
| type HealListReply struct {
 | |
| 	IsTruncated bool
 | |
| 	NextMarker  string
 | |
| 	Objects     []string
 | |
| }
 | |
| 
 | |
| // ListObjects - list all objects that needs healing.
 | |
| func (c *controllerAPIHandlers) ListObjectsHealHandler(args *HealListArgs, reply *HealListReply) error {
 | |
| 	objAPI := c.ObjectAPI()
 | |
| 	if objAPI == nil {
 | |
| 		return errVolumeBusy
 | |
| 	}
 | |
| 	if !isRPCTokenValid(args.Token) {
 | |
| 		return errInvalidToken
 | |
| 	}
 | |
| 	info, err := objAPI.ListObjectsHeal(args.Bucket, args.Prefix, args.Marker, args.Delimiter, args.MaxKeys)
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	reply.IsTruncated = info.IsTruncated
 | |
| 	reply.NextMarker = info.NextMarker
 | |
| 	for _, obj := range info.Objects {
 | |
| 		reply.Objects = append(reply.Objects, obj.Name)
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // HealObjectArgs - argument for HealObject RPC.
 | |
| type HealObjectArgs struct {
 | |
| 	// Authentication token generated by Login.
 | |
| 	GenericArgs
 | |
| 
 | |
| 	// Name of the bucket.
 | |
| 	Bucket string
 | |
| 
 | |
| 	// Name of the object.
 | |
| 	Object string
 | |
| }
 | |
| 
 | |
| // HealObjectReply - reply by HealObject RPC.
 | |
| type HealObjectReply struct{}
 | |
| 
 | |
| // HealObject - heal the object.
 | |
| func (c *controllerAPIHandlers) HealObjectHandler(args *HealObjectArgs, reply *GenericReply) error {
 | |
| 	objAPI := c.ObjectAPI()
 | |
| 	if objAPI == nil {
 | |
| 		return errVolumeBusy
 | |
| 	}
 | |
| 	if !isRPCTokenValid(args.Token) {
 | |
| 		return errInvalidToken
 | |
| 	}
 | |
| 	return objAPI.HealObject(args.Bucket, args.Object)
 | |
| }
 | |
| 
 | |
| // HealObject - heal the object.
 | |
| func (c *controllerAPIHandlers) HealDiskMetadataHandler(args *GenericArgs, reply *GenericReply) error {
 | |
| 	objAPI := c.ObjectAPI()
 | |
| 	if objAPI == nil {
 | |
| 		return errVolumeBusy
 | |
| 	}
 | |
| 	if !isRPCTokenValid(args.Token) {
 | |
| 		return errInvalidToken
 | |
| 	}
 | |
| 	err := objAPI.HealDiskMetadata()
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	go func() {
 | |
| 		globalWakeupCh <- struct{}{}
 | |
| 	}()
 | |
| 	return err
 | |
| }
 | |
| 
 | |
| // ShutdownArgs - argument for Shutdown RPC.
 | |
| type ShutdownArgs struct {
 | |
| 	// Authentication token generated by Login.
 | |
| 	GenericArgs
 | |
| 
 | |
| 	// Should the server be restarted, all active connections are
 | |
| 	// served before server is restarted.
 | |
| 	Restart bool
 | |
| }
 | |
| 
 | |
| // Shutdown - Shutsdown the server.
 | |
| func (c *controllerAPIHandlers) ShutdownHandler(args *ShutdownArgs, reply *GenericReply) error {
 | |
| 	if !isRPCTokenValid(args.Token) {
 | |
| 		return errInvalidToken
 | |
| 	}
 | |
| 	if args.Restart {
 | |
| 		globalShutdownSignalCh <- shutdownRestart
 | |
| 	} else {
 | |
| 		globalShutdownSignalCh <- shutdownHalt
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (c *controllerAPIHandlers) TryInitHandler(args *GenericArgs, reply *GenericReply) error {
 | |
| 	go func() {
 | |
| 		globalWakeupCh <- struct{}{}
 | |
| 	}()
 | |
| 	*reply = GenericReply{}
 | |
| 	return nil
 | |
| 
 | |
| }
 | |
| 
 | |
| // LockInfo - RPC control handler for `minio control lock`.
 | |
| // Returns the info of the locks held in the system.
 | |
| func (c *controllerAPIHandlers) LockInfo(arg *GenericArgs, reply *SystemLockState) error {
 | |
| 	// obtain the lock state information.
 | |
| 	lockInfo, err := generateSystemLockResponse()
 | |
| 	// in case of error, return err to the RPC client.
 | |
| 	if err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	// the response containing the lock info.
 | |
| 	*reply = lockInfo
 | |
| 	return nil
 | |
| }
 |