コード例 #1
0
ファイル: server.go プロジェクト: Cristofori/kmud
func newUser(conn *wrappedConnection) types.User {
	for {
		name := utils.GetUserInput(conn, "Desired username: "******"" {
			return nil
		}

		user := model.GetUserByName(name)
		password := ""

		if user != nil {
			utils.WriteLine(conn, "That name is unavailable", types.ColorModeNone)
		} else if err := utils.ValidateName(name); err != nil {
			utils.WriteLine(conn, err.Error(), types.ColorModeNone)
		} else {
			conn.WillEcho()
			for {
				pass1 := utils.GetRawUserInputSuffix(conn, "Desired password: "******"\r\n", types.ColorModeNone)

				if len(pass1) < 7 {
					utils.WriteLine(conn, "Passwords must be at least 7 letters in length", types.ColorModeNone)
					continue
				}

				pass2 := utils.GetRawUserInputSuffix(conn, "Confirm password: "******"\r\n", types.ColorModeNone)

				if pass1 != pass2 {
					utils.WriteLine(conn, "Passwords do not match", types.ColorModeNone)
					continue
				}

				password = pass1

				break
			}
			conn.WontEcho()

			admin := model.UserCount() == 0
			user = model.CreateUser(name, password, admin)
			return user
		}
	}
}
コード例 #2
0
ファイル: server.go プロジェクト: Cristofori/kmud
func login(conn *wrappedConnection) types.User {
	for {
		username := utils.GetUserInput(conn, "Username: "******"" {
			return nil
		}

		user := model.GetUserByName(username)

		if user == nil {
			utils.WriteLine(conn, "User not found", types.ColorModeNone)
		} else if user.IsOnline() {
			utils.WriteLine(conn, "That user is already online", types.ColorModeNone)
		} else {
			attempts := 1
			conn.WillEcho()
			for {
				password := utils.GetRawUserInputSuffix(conn, "Password: "******"\r\n", types.ColorModeNone)

				// TODO - Disabling password verification to make development easier
				if user.VerifyPassword(password) || true {
					break
				}

				if attempts >= 3 {
					utils.WriteLine(conn, "Too many failed login attempts", types.ColorModeNone)
					conn.Close()
					panic("Booted user due to too many failed logins (" + user.GetName() + ")")
				}

				attempts++

				time.Sleep(2 * time.Second)
				utils.WriteLine(conn, "Invalid password", types.ColorModeNone)
			}
			conn.WontEcho()

			return user
		}
	}
}