Example #1
0
func Configure() {
	c := types.NewCliConfig()
	fmt.Printf("Modifying \"%s\" \n\n", c.CredentialsFile)

	var Profile string
	firstProfile := ""

	if len(c.GetProfiles()) < 1 {
		fmt.Printf("Profile Name [default]: ")
	} else {
		fmt.Printf("Choose an existing profile to update or enter a new one to create: \n")

		fmt.Printf("Available profiles: [ ")
		for i, profile := range c.GetProfiles() {
			if firstProfile == "" {
				firstProfile = profile
			}
			fmt.Printf("%s", profile)
			if i+1 < len(c.GetProfiles()) {
				fmt.Printf(", ")
			}
		}
		fmt.Printf(" ]\n")
		fmt.Printf("Profile Name [%s]: ", firstProfile)
	}

	fmt.Scanf("%s", &Profile)
	if Profile == "" {
		if firstProfile == "" {
			Profile = "default"
		} else {
			Profile = firstProfile
		}
	}

	var newProfile = true
	for _, profile := range c.GetProfiles() {
		if Profile == profile {
			newProfile = false
		}
	}

	var AccessKeyID string
	var SecretAccessKey string

	if newProfile {
		AccessKeyID = ""
		SecretAccessKey = ""
	} else {
		AccessKeyID = c.GetKeyID(Profile)
		SecretAccessKey = c.GetAccessKey(Profile)
	}

	if AccessKeyID == "" {
		AccessKeyID = "None"
	}

	fmt.Printf("AWS Access Key ID [%s]: ", AccessKeyID)
	fmt.Scanf("%s", &AccessKeyID)

	if SecretAccessKey == "" {
		SecretAccessKey = "None"
	}

	fmt.Printf("AWS Secret Access Key [%s]: ", SecretAccessKey)
	fmt.Scanf("%s", &SecretAccessKey)

	// goconfig updates profile or creates new one
	c.WriteProfile(Profile, AccessKeyID, SecretAccessKey)

}
Example #2
0
func CreateUsers(profile, srcFile string) {
	fmt.Printf("Reading users from %s\n", srcFile)

	// check if a data file not provided
	if srcFile == "" {
		fmt.Printf("srcFile=%s\n", srcFile)
		fmt.Printf("provide a file with users -create-users -file={your file} \n")
		return
	}

	// create a slice of User struct
	var users = []types.User{}

	// read configuration file provided
	csvFile, err := os.Open(srcFile)

	if err != nil {
		fmt.Printf("Can't open file: %s\n", srcFile)
		fmt.Println(err)
		return
	}

	defer csvFile.Close()

	// create User struct from csv file
	reader := csv.NewReader(csvFile)
	for {
		line, err := reader.Read()
		if err == io.EOF {
			break
		} else if err != nil {
			fmt.Println(err)
			return
		}
		if len(line) != 3 {
			fmt.Printf("Line stated below doesn't have 3 values\n%s\n", line)
			return
		}
		users = append(users, types.User{line[0], line[1], line[2]})
	}

	// get IAM user to use in order to create other users
	c := types.NewCliConfig()

	// create credentials from the .credentials file using the profile user passed
	creds := credentials.NewStaticCredentials(c.GetKeyID(profile), c.GetAccessKey(profile), "")

	// create a IAM service
	svc := iam.New(&aws.Config{
		Credentials: creds,
	})

	// loop over users slice and create users
	for _, u := range users {
		if err := u.CreateUser(svc); err == nil {
			if err = u.CreateLoginProfile(svc); err == nil {
				if err = u.AddUserToGroup(svc); err == nil {
					fmt.Printf("Created user \"%s\" with password \"%s\" in group \"%s\"\n", u.UserName, u.Password, u.GroupName)
				}
			}
		} else {
			fmt.Println(err.Error())
		}
	}
}