syntaxwebsite/app/routes/rbxapi.py

186 lines
7.4 KiB
Python

from flask import Blueprint, render_template, request, redirect, url_for, flash, jsonify
from app.util import auth, membership
from app.enums.MembershipType import MembershipType
from app.extensions import db, redis_controller, get_remote_address
from app.models.user import User
from app.models.user_email import UserEmail
from app.services import economy
from datetime import datetime, timedelta
from config import Config
config = Config()
RBXAPIRoute = Blueprint('RBXAPIRoute', __name__, template_folder='pages')
@RBXAPIRoute.route("/users/<int:userid>", methods=["GET"])
def UserInfoAPI( userid : int ):
UserObj : User = User.query.filter_by( id = userid ).first()
if UserObj is None:
return jsonify( { "success" : False, "message" : "User not found" } ), 404
return jsonify({
"Id" : UserObj.id,
"Username" : UserObj.username
})
@RBXAPIRoute.route("/users/account-info", methods=["GET"])
@auth.authenticated_required_api
def GetUserAccountInfo():
AuthenticatedUser : User = auth.GetCurrentUser()
if AuthenticatedUser is None:
return jsonify({"success": False, "message": "Unauthorized"}),401
UserMembershipType : int = membership.GetUserMembership( AuthenticatedUser ).value
RobuxBalance, _ = economy.GetUserBalance( AuthenticatedUser )
UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id = AuthenticatedUser.id ).first()
if UserEmailObj is not None:
emailParts = UserEmailObj.email.split("@")
FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1)
SecondPart = emailParts[1]
HiddenEmail = FirstPart + "@" + SecondPart
else:
HiddenEmail = None
return jsonify({
"UserId": AuthenticatedUser.id,
"Username": AuthenticatedUser.username,
"DisplayName": AuthenticatedUser.username,
"HasPasswordSet": True,
"Email": HiddenEmail,
"MembershipType": UserMembershipType,
"RobuxBalance": RobuxBalance,
"AgeBracket": 0,
"Roles": [],
"EmailNotificationEnabled": False,
"PasswordNotifcationEnabled": False
})
@RBXAPIRoute.route("/my/settings/json", methods=["GET"])
@auth.authenticated_required_api
def GetMySettingsJSON():
AuthenticatedUser : User = auth.GetCurrentUser()
UserEmailObj : UserEmail = UserEmail.query.filter_by(user_id = AuthenticatedUser.id ).first()
if UserEmailObj is not None:
emailParts = UserEmailObj.email.split("@")
FirstPart = emailParts[0][0] + "*" * (len(emailParts[0])-1)
SecondPart = emailParts[1]
HiddenEmail = FirstPart + "@" + SecondPart
else:
HiddenEmail = None
UserMembershipType : MembershipType = membership.GetUserMembership( AuthenticatedUser )
return jsonify({
"ChangeUsernameEnabled": True,
"IsAdmin": False,
"UserId": AuthenticatedUser.id,
"Name": AuthenticatedUser.username,
"DisplayName": AuthenticatedUser.username,
"IsEmailOnFile": UserEmailObj is not None,
"IsEmailVerified": UserEmailObj is not None and UserEmailObj.verified,
"IsPhoneFeatureEnabled": False,
"RobuxRemainingForUsernameChange": 0,
"PreviousUserNames": "",
"UseSuperSafePrivacyMode": False,
"IsSuperSafeModeEnabledForPrivacySetting": False,
"UseSuperSafeChat": False,
"IsAppChatSettingEnabled": True,
"IsGameChatSettingEnabled": True,
"IsAccountPrivacySettingsV2Enabled": True,
"IsSetPasswordNotificationEnabled": False,
"ChangePasswordRequiresTwoStepVerification": False,
"ChangeEmailRequiresTwoStepVerification": False,
"UserEmail": HiddenEmail,
"UserEmailMasked": True,
"UserEmailVerified": UserEmailObj is not None and UserEmailObj.verified,
"CanHideInventory": False,
"CanTrade": UserMembershipType != MembershipType.NonBuildersClub,
"MissingParentEmail": False,
"IsUpdateEmailSectionShown": True,
"IsUnder13UpdateEmailMessageSectionShown": False,
"IsUserConnectedToFacebook": False,
"IsTwoStepToggleEnabled": False,
"AgeBracket": 0,
"UserAbove13": True,
"ClientIpAddress": get_remote_address(),
"AccountAgeInDays": (datetime.utcnow() - AuthenticatedUser.created).days,
"IsOBC": UserMembershipType == MembershipType.OutrageousBuildersClub,
"IsTBC": UserMembershipType == MembershipType.TurboBuildersClub,
"IsAnyBC": UserMembershipType != MembershipType.NonBuildersClub,
"IsPremium": False,
"IsBcRenewalMembership": False,
"BcExpireDate": "/Date(-0)/",
"BcRenewalPeriod": None,
"BcLevel": None,
"HasCurrencyOperationError": False,
"CurrencyOperationErrorMessage": None,
"BlockedUsersModel": {
"BlockedUserIds": [],
"BlockedUsers": [],
"MaxBlockedUsers": 50,
"Total": 1,
"Page": 1
},
"Tab": None,
"ChangePassword": False,
"IsAccountPinEnabled": True,
"IsAccountRestrictionsFeatureEnabled": True,
"IsAccountRestrictionsSettingEnabled": False,
"IsAccountSettingsSocialNetworksV2Enabled": False,
"IsUiBootstrapModalV2Enabled": True,
"IsI18nBirthdayPickerInAccountSettingsEnabled": True,
"InApp": False,
"MyAccountSecurityModel": {
"IsEmailSet": UserEmailObj is not None,
"IsEmailVerified": UserEmailObj is not None and UserEmailObj.verified,
"IsTwoStepEnabled": False,
"ShowSignOutFromAllSessions": True,
"TwoStepVerificationViewModel": {
"UserId": AuthenticatedUser.id,
"IsEnabled": False,
"CodeLength": 6,
"ValidCodeCharacters": None
}
},
"ApiProxyDomain": config.BaseURL,
"AccountSettingsApiDomain": config.BaseURL,
"AuthDomain": config.BaseURL,
"IsDisconnectFbSocialSignOnEnabled": True,
"IsDisconnectXboxEnabled": True,
"NotificationSettingsDomain": config.BaseURL,
"AllowedNotificationSourceTypes": [
"Test",
"FriendRequestReceived",
"FriendRequestAccepted",
"PartyInviteReceived",
"PartyMemberJoined",
"ChatNewMessage",
"PrivateMessageReceived",
"UserAddedToPrivateServerWhiteList",
"ConversationUniverseChanged",
"TeamCreateInvite",
"GameUpdate",
"DeveloperMetricsAvailable"
],
"AllowedReceiverDestinationTypes": [
"DesktopPush",
"NotificationStream"
],
"BlacklistedNotificationSourceTypesForMobilePush": [],
"MinimumChromeVersionForPushNotifications": 50,
"PushNotificationsEnabledOnFirefox": True,
"LocaleApiDomain": config.BaseURL,
"HasValidPasswordSet": True,
"IsUpdateEmailApiEndpointEnabled": True,
"FastTrackMember": None,
"IsFastTrackAccessible": False,
"HasFreeNameChange": False,
"IsAgeDownEnabled": False,
"IsSendVerifyEmailApiEndpointEnabled": True,
"IsPromotionChannelsEndpointEnabled": True,
"ReceiveNewsletter": False,
"SocialNetworksVisibilityPrivacy": 6,
"SocialNetworksVisibilityPrivacyValue": "AllUsers",
"Facebook": None,
"Twitter": None,
"YouTube": None,
"Twitch": None
})