Get User Password Date from internal user source

I’m struggling to find the Password Date field that @PGriffith pointed out to me in this post:

Can someone please help me find this class via the GatewayContext variable?

EDIT:
This is what I have so far

import com.inductiveautomation.ignition.common.user.User;
import com.inductiveautomation.ignition.gateway.localdb.persistence.LongField;
import com.inductiveautomation.ignition.gateway.localdb.persistence.PersistenceSession;
import com.inductiveautomation.ignition.gateway.model.GatewayContext;
import com.inductiveautomation.ignition.gateway.user.UserSourceProfile;

import java.util.Optional;


public class GatewayScriptModule extends AbstractScriptModule {
    private GatewayContext gc;

    public GatewayScriptModule(GatewayContext gc){
        this.gc = gc;
    }
    @Override
    protected LongField getUserPasswordDate(String userSource, String userName){
        UserSourceProfile userSourceProfile = gc.getUserSourceManager().getProfile(userSource);

        gc.getUserSourceManager().findUserProperty()

        try {
            User user = userSourceProfile.getUser(userName);
            user.
        }
        catch(Exception e){
            return null;
        }
    }
}

Thanks,
Brandon

You’re going to need to query for the underlying record using the ID provided by the User instance (under the assumption that the bare Serializable returned by User.getId() is always going to be an Integer); something like:

    protected Long getUserPasswordDate(String userSource, String userName) {
        try {
            UserSourceProfile userSourceProfile = gc.getUserSourceManager().getProfile(userSource);
            return userSourceProfile.getUser(userName)
                .map(user -> {
                        var query = new SQuery<>(InternalUserRecord.META).eq(InternalUserRecord.UserId, user.getId());
                        return gc.getPersistenceInterface().queryOne(query);
                    }
                ).map(record -> record.getLong(InternalUserRecord.PasswordDate))
                .orElseThrow();
        } catch (Exception e) {
            return null;
        }
    }